2013-03-11 75 views
1

我使用NanoHTTPd從我的Android應用程序提供文件。我可以打開.html文件,但它試圖查看圖像是問題所在。任何類似網頁背景圖片都不會顯示。Java HTTP服務器和資源

有沒有人有這方面的任何示例代碼。我知道nanoHTTPd可以做到這一點。我有很多Android和Java的經驗,但這是我第一次使用服務器。

private class MyHTTPD extends NanoHTTPD { 
    public MyHTTPD() throws IOException { 
     super(PORT, null); 
    } 

    @Override 
    public Response serve(String uri, String method, Properties header, Properties parms, Properties files) { 
     Log.d("response", "URI:" + uri + " method: " + method + " header: " + header + " parms: " + parms + " files: " + files); 
     final StringBuilder buf = new StringBuilder(); 
     for (Entry<Object, Object> kv : header.entrySet()) 
      buf.append(kv.getKey() + " : " + kv.getValue() + "\n"); 
     handler.post(new Runnable() { 
      @Override 
      public void run() { 
       hello.setText(buf); 
      } 
     }); 

     String html = null; 
     InputStream is = null; 
     if (uri.length() > 3) { 
      // respond with resource or sub page 

      // serve image? 
      if (uri.substring(uri.lastIndexOf("."), uri.length()).equals(".jpg")) { 
       try { 
        is = new FileInputStream(Environment.getExternalStorageDirectory().getPath() + "/WiFile" + uri); 
        Log.d("Serve", "image: " + Environment.getExternalStorageDirectory().getPath() + "/WiFile" + uri); 
       } catch (FileNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } else { 
       //serve page 
       try { 
        is = new FileInputStream(Environment.getExternalStorageDirectory().getPath() + "/WiFile" + uri); 
        Log.d("response subpage", Environment.getExternalStorageDirectory().getPath() + "/WiFile" + uri); 
       } catch (FileNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } else { 
      // respond with index 
      try { 
       is = new FileInputStream(Environment.getExternalStorageDirectory().getPath() + "/WiFile/" + "index.html"); 
      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      Log.d("response index", Environment.getExternalStorageDirectory().getPath() + "/WiFile/" + "index.html"); 
     } 

     byte[] b; 
     try { 
      b = new byte[is.available()]; 
      is.read(b); 
      html = new String(b); 
     } catch (IOException e) { // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return new NanoHTTPD.Response(HTTP_OK, MIME_HTML, html); 
    } 
} 

編輯:

在瀏覽器中打開圖像只是返回大量文字符號(...��k�OOO�...)。我是否以錯誤的方式解析圖像?

修復:

像古斯塔夫說我是不是使用corrent米姆類型,但我也沒有返回serveFile(.....),如....

// serve image? 
      if (uri.substring(uri.lastIndexOf("."), uri.length()).equals(".jpeg")) { 
       try { 
        is = new FileInputStream(Environment.getExternalStorageDirectory().getPath() + "/WiFile" + uri); 
        mimeType = "image/jpeg"; 
        Log.d("Serve", "image: " + Environment.getExternalStorageDirectory().getPath() + "/WiFile" + uri); 
        return serveFile(uri, header, new File(Environment.getExternalStorageDirectory().getPath() + "/WiFile"), true); 
       } catch (FileNotFoundException e) {} 
      } else { 
       //serve page 
       try { 
        is = new FileInputStream(Environment.getExternalStorageDirectory().getPath() + "/WiFile" + uri); 
        mimeType = MIME_HTML; 
        Log.d("response subpage", Environment.getExternalStorageDirectory().getPath() + "/WiFile" + uri); 
        return serveFile(uri, header, new File(Environment.getExternalStorageDirectory().getPath() + "/WiFile"), true); 
       } catch (FileNotFoundException e) {} 
      } 
     } else { 
      // respond with index 
      try { 
       is = new FileInputStream(Environment.getExternalStorageDirectory().getPath() + "/WiFile/" + "index.html"); 
       mimeType = MIME_HTML; 
       Log.d("response index", Environment.getExternalStorageDirectory().getPath() + "/WiFile/" + "index.html"); 
       return serveFile(uri, header, new File(Environment.getExternalStorageDirectory().getPath() + "/WiFile"), true); 
      } catch (FileNotFoundException e) {} 
     } 

回答

2

你無論您將要發送什麼樣的有效內容,都將MIME_HTML傳遞給Response構造函數。參數是String,所以嘗試

return new NanoHTTPD.Response(HTTP_OK, "image/jpeg", html); 

當服務(JPEG)圖像。

+0

感謝您的幫助,我做了修改,以便在發送jpeg圖像時使用「image/jpeg」作爲mime類型。只有現在我得到一個腐敗的圖像圖標。有任何想法嗎? – user1056798 2013-03-12 10:13:41