2016-11-04 129 views
0

我想將圖像轉換爲byte[]並通過servlet發送。 我已經將圖像轉換爲byte[],但發送給客戶?如何通過servlet發送字節[] java

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 

    String name=request.getParameter("name"); 
    File f = new File("/Users/shilu/MyProject/Chat/Photo/" + name); 
    byte[] data = Files.readAllBytes(f.toPath()); 
    //What to do now?? 
} 
+0

什麼樣的形象? PNG,JPG ...? –

回答

1

這取決於圖像的類型,因爲您需要指定與您的圖像類型匹配的content type

所以這裏假設你要發送一個png,代碼可能是這樣的:

// Set the media type matching with my image 
response.setContentType("image/png"); 
// Write the data 
try (OutputStream out = response.getOutputStream()) { 
    out.write(data); 
} 
+1

雖然'flush()'是不必要的,因爲隱式'close()'也會執行刷新。 – Kayaman

+0

@Kayaman我想知道是否需要它,我沒有在[OutputStream#close()]的文檔中清楚地看到它(https://docs.oracle.com/javase/8/docs/api/ java/io/OutputStream.html#close--),即使經驗豐富,我也知道它會在必要時被刷新,但它可能是實現特定的,你不同意嗎? –

+1

我會猶豫地說它是特定於實現的。我會說設計不好的流會丟棄字節而不是刷新它們,但是'OutputStream'沒有指定任何行爲。然而,'FilterOutputStream'實質上是所有自定義的'OutputStreams'的超類,它會在關閉時刷新並聲明它是這樣做的。在這種情況下,我不會爲編寫過分謹慎的代碼而煩惱,但是YMMV。 – Kayaman