来自HttpServletRequest的NULL bufferedImage

时间:2013-10-27 00:56:09

标签: java

我正在尝试阅读此POST请求并提取图像。然后将其保存到磁盘,但缓冲的图像为空

这是代码(主要部分):

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"));

1 个答案:

答案 0 :(得分:1)

除非您使用像从闪存发送屏幕截图到服务器的奇特机制,否则用于发送图像的表单可能是多部分/表单数据。 在这种情况下,输入流不仅仅保存二进制图像信息,它是多部分编码的,因此也有一些与文件相关的信息,以及其他表单元素。 以下是输入流的示例输出。当您尝试从该流创建图像时,由于多部分分隔符,它将无法解析。

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

[binarydata]

Apache commons有一个库可以解析您可以使用的多部分表单数据。 http://commons.apache.org/proper/commons-fileupload/