如何通过java http服务器发送图像

Moh*_*aei 6 java http

我正在使用HttpServer和开发HTTP服务器HttpHandler.服务器应该使用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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

JB *_*zet 11

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

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();
Run Code Online (Sandbox Code Playgroud)