簡體   English   中英

Java HTTP服務器和資源

[英]Java HTTP Server and Resources

我正在使用NanoHTTPd從我的Android應用程序提供文件。 我可以很好地打開.html文件,但它正在嘗試查看圖像,這就是問題所在。 網頁背景圖片等任何內容均不會顯示。

有人對此有任何示例代碼嗎? 我知道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�...)。 我以錯誤的方式解析圖像嗎?

固定:

就像古斯塔夫(Gustav)所說的那樣,我沒有使用現成的meme類型,但也沒有返回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) {}
        }

無論要將什么作為有效載荷發送,都將MIME_HTML傳遞給Response構造函數。 該參數是String ,因此請嘗試

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

提供(JPEG)圖像時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM