读取输入流中"file upload"获取的图像不止一次



嗨,我正在编写 servlet 以在具有静态输入的对象下上传图像作为inputstream

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

我的代码第一次工作,之后输入strem关闭(我不知道这到底是什么意思,我无法从中读取。

我已经使用了几种方法,但仍然遇到相同的问题

如何解决这个问题?

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

因为我的代码中的img,我曾经从HTTP reqeut读取,是临时的,那么我找到的解决方案是将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

最新更新