多次读取输入流中“文件上传”所获得的图像

时间:2018-09-19 09:29:36

标签: java java-ee tomcat8

您好,我正在编码servlet,以将图像作为inputstream上传到具有静态inputream的对象下。

上传图像后,我正在使用某种方法来调整图像的大小并将调整后的图像返回给客户端。

我的代码第一次工作,然后关闭输入字符串(我不知道这是什么意思,我无法从中读取内容。

我使用了几种方法,但仍然存在相同的问题

该如何解决?

    public String getImageArtRes() throws IOException {
    ImageInputStream origimg = 
    ImageIO.createImageInputStream(this.get_Image());

    BufferedImage img = ImageIO.read(origimg);
    img.flush();

    BufferedImage resized = resize(img, 80, 120);
    String b64 = null;
    resized.flush();
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    ImageIO.write(resized, this.getImgType().replace("image/", ""), os);
    os.flush();

    byte[] imageInByteArray = os.toByteArray();
    b64 = javax.xml.bind.DatatypeConverter.printBase64Binary(imageInByteArray);
    os.close();

    return b64;
}

我正在使用此代码获取图像:

    private static List<ArticleIMG> getImages(HttpServletRequest request) throws IOException, ServletException {
    Collection<Part> parts = request.getParts();
    InputStream img = null;
    ...
    for (Part part : parts) {
    ...
                img=part.getInputStream();
                imgTemp.setImage(img);                    
                getImagesArt().add(imgTemp);
    ...

我的Java版本是1.8

1 个答案:

答案 0 :(得分:0)

因为我的代码中的img是临时的,所以我以前从HTTP请求中读取的img是临时的,所以我找到的解决方案是将InputStream转换为buffueredimage:

...
    InputStream img = null;
    BufferedImage image = null;
...
    img=part.getInputStream();

    image = ImageIO.read(img);
    imgTemp.setImage(image);                    
    getImagesArt().add(imgTemp);
...

另一件事,IOImage的jpg存在问题,对我来说,解决方案是使用此方法https://stackoverflow.com/a/23011325/1435391