Java-HTTPServer中的图像响应

Java-HTTPServer中的图像响应,java,image,httpserver,Java,Image,Httpserver,我有一个java的web服务器,如下所示: public static void main(String[] args) throws Exception { HttpServer server = HttpServer.create(new InetSocketAddress(80), 0); server.createContext("/", new HomeHandler()); server.setExecutor(null); // creates a default

我有一个java的web服务器,如下所示:

public static void main(String[] args) throws Exception {
   HttpServer server = HttpServer.create(new InetSocketAddress(80), 0);
   server.createContext("/", new HomeHandler());
   server.setExecutor(null); // creates a default executor
   server.start();
}
这是家庭处理程序:

class HomeHandler implements HttpHandler {
    public void handle(HttpExchange t) throws IOException {
    String filepath = "C:\\Public\\home.html";
        String response = getPage(filepath);
        t.sendResponseHeaders(200, response.length());
        OutputStream os = t.getResponseBody();
        os.write(response.getBytes());
        os.close();
    }
}
最后是函数
getPage()

但当我的主页加载时,它有一个图像,因此浏览器向我的服务器发出另一个图像请求,我为图像创建了一个类似的处理程序,它做同样的事情,即调用函数getPage(),将图像的文件路径作为参数传入


但当它在浏览器中实际运行时,它不会显示图像。但是,当我在新标签中单独打开图像时,它正确地显示了图像的大小(Google Chrome是我的浏览器,是今天最新的一款)

图像是二进制数据,不能通过
字符串传递(不能存储/产生特定的字节序列)。因此直接使用
字节[]
。最好设置响应类型
内容类型:application/jpeg
png
gif

另外,您的代码使用的是平台的编码。对于指定的编码,请使用通用Unicode:

getBytes() // Platform dependant
getBytes("UTF-8") // Specified

new FileReader(file) // Platform dependant
new InputStreamReader(new FileInputStream(file),) // Platform dependant
new InputStreamReader(new FileInputStream(file), "UTF-8") // Specified


new FileWriter(file) // Platform dependant
new OutputStreamWriter(new FileOutputStream(file)) // Platform dependant
new OutputStreamWriter(new FileOutputStream(file), "UTF-8") // Specified

byte[] bytes;
new String(bytes) // Platform dependant
new String(bytes, "UTF-8") // Specified

下面介绍如何实现一个处理程序,将图像发送回UI:

private void forwardImage(HttpExchange exchange, String imagefilename) throws IOException {

    byte[] result = readSmallBinaryFile(imagefilename);

    if (result == null) {       
        // resource_not_found_error
    }


    exchange.getResponseHeaders().set("Content-Type", CONTENT_TYPE_IMG);
    OutputStream os = null;
    try {
        exchange.sendResponseHeaders(200, message.length);
        os = exchange.getResponseBody();
        os.write(message);
    } finally {
        os.close();
    }

    return os;
}  

如果您输入
getPage
函数代码,将所有要发送到客户端的数据保存到文件中,您会得到什么?顺便问一下,使用
String
可以存储二进制图像数据吗?对代码块使用一致的逻辑缩进。代码的缩进旨在帮助人们理解程序流程!
private void forwardImage(HttpExchange exchange, String imagefilename) throws IOException {

    byte[] result = readSmallBinaryFile(imagefilename);

    if (result == null) {       
        // resource_not_found_error
    }


    exchange.getResponseHeaders().set("Content-Type", CONTENT_TYPE_IMG);
    OutputStream os = null;
    try {
        exchange.sendResponseHeaders(200, message.length);
        os = exchange.getResponseBody();
        os.write(message);
    } finally {
        os.close();
    }

    return os;
}