簡體   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