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