2013-10-27 4 views
-1

Я пытаюсь прочитать этот запрос POST и извлечь изображение. Затем сохраните его на диск, но буферном изображение является нулевымNULL bufferedImage from 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

Это сервер Jetty, получающий запрос POST. –

+0

У вас уже есть 'InputStream' из' request.getInputStream() '. Вам не нужно читать это в массив байтов, а затем строить * другой * '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/

Смежные вопросы