Прочитать изображение, полученное путем «загрузки файла» во входном потоке более одного раза - PullRequest
0 голосов
/ 19 сентября 2018

Привет, я кодирую сервлет для загрузки изображения как inputstream под объектом со статическим входным потоком.

После загрузки изображений я использую какой-то метод для изменения размера изображения и возврата измененного изображения клиенту.

Мой код работает впервые, и после этого входная строка закрывается (я не знаю точно, что это значит, и не могу прочитать из нее.

Я использовал несколькометоды, но все еще с той же проблемой

Как решить эту проблему?

    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 голосов
/ 19 сентября 2018

, поскольку img в моем коде, который я использовал для чтения из HTTP-запроса, является временным, тогда решение, которое я нашел, состоит в том, чтобы преобразовать 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

...