【问题标题】:How to send an image over Java HTTP server如何通过 Java HTTP 服务器发送图像
【发布时间】:2014-11-12 05:52:51
【问题描述】:

我正在使用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 字节的数据。

【问题讨论】:

    标签: java http


    【解决方案1】:

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

    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();
    

    【讨论】:

    • 这样,图像被下载到浏览器上。如果我需要在浏览器中显示图像(有点像有一个 标签)怎么办?
    • @HarshChiki <img src="/path/to/the/servlet/or/handler/or/action/which/allows/dowloading/the/image" />
    【解决方案2】:

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

    代替你当前的写行,试试这个(未经测试):

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多