2013-10-27 33 views
-1

我想讀取此POST請求並提取圖像。然後將其保存到磁盤,但是緩存圖像爲nullNULL從HttpServletRequest的緩衝圖像

這裏是代碼(主要部分):

private void handleImage(String target, Request baseRequest, HttpServletRequest request, 
      HttpServletResponse response) throws Exception{ 


     InputStream inStream = request.getInputStream(); 

     byte[] body = IOUtils.toByteArray(inStream); 

     InputStream in = new ByteArrayInputStream(body); 
     BufferedImage bImageFromConvert = ImageIO.read(in); 

     ImageIO.write(bImageFromConvert, "png", new File(
       "hi.png")); 
+0

什麼是您正在使用的應用程序服務器? –

+0

這是一個接收POST請求的Jetty服務器 –

+0

您已經有了'request.getInputStream()'的'InputStream'。你不需要把它讀入字節數組,然後構造* another *'InputStream.'只需要'ImageIO.read(request.getInputStream())。'' – EJP

回答

1

除非你使用像閃存發送截屏服務器看中機制,您用來發送圖像的表單可能是multipart/form-data。 在這種情況下,輸入流不僅保存二進制圖像信息,而且是多部分編碼的,所以還有一些與文件相關的信息以及其他表單元素。 以下是輸入流的示例輸出。當您嘗試從該流創建圖像時,由於多部分分隔符,它將無法解析。

------WebKitFormBoundaryrD6PkQsxtK9sZGBB 
Content-Disposition: form-data; name="test"; filename="test.png" 
Content-Type: image/png 

[binarydata] 

Apache commons有一個庫來解析可以使用的多部分表單數據。 http://commons.apache.org/proper/commons-fileupload/