繁体   English   中英

如何通过Java HTTP服务器发送映像

[英]How to send an image over Java HTTP server

我正在使用HttpServerHttpHandler开发一个HTTP服务器。

服务器应该使用XML数据或图像响应客户端。

到目前为止,我已经开发了HttpHandler实现,它们使用XML数据响应客户端,但是我无法实现从文件读取图像并将其发送到客户端(例如,浏览器)的HttpHandler

图像不应该完全加载到内存中,因此我需要某种流式解决方案。

public class ImagesHandler implements HttpHandler {
    @Override
    public void handle(HttpExchange arg0) throws IOException {
        File file=new File("/root/images/test.gif");
        BufferedImage bufferedImage=ImageIO.read(file);

        WritableRaster writableRaster=bufferedImage.getRaster();
        DataBufferByte data=(DataBufferByte) writableRaster.getDataBuffer();

        arg0.sendResponseHeaders(200, data.getData().length);
        OutputStream outputStream=arg0.getResponseBody();
        outputStream.write(data.getData());
        outputStream.close();
    }
}

此代码只向浏览器发送512字节的数据。

你在这里做了太多工作:解码图像,并将其存储在内存中。 您不应该尝试将文件作为图像读取。 那没用。 浏览器的所有需求都是图像文件中的字节数。 所以你应该简单地按原样发送图像文件中的字节:

File file = new File("/root/images/test.gif");
arg0.sendResponseHeaders(200, file.length());
// TODO set the Content-Type header to image/gif 

OutputStream outputStream=arg0.getResponseBody();
Files.copy(file.toPath(), outputStream);
outputStream.close();

DataBufferByte将其数据存储在银行中。 getData()仅检索第一个库,因此您只声明第一个库的长度,然后只写第一个库。

而不是你当前的写行,而是尝试这个(未经测试):

arg0.sendResponseHeaders(200, data.getDataTypeSize(TYPE_BYTE));
OutputStream outputStream=arg0.getResponseBody();
for (byte[] dataBank : data.getBankData()) {
  outputStream.write(dataBank);
}
outputStream.close

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM