Как отобразить png в http-запросе?

У меня есть контроллер, подключенный к этому методу из запроса GET:

def renderPNG() {
    URL url = new URL("https://absolute.url.png");
    BufferedImage img = ImageIO.read(url);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ImageIO.write(img, "png", baos);
    InputStream is = new ByteArrayInputStream(baos.toByteArray());
    DataInputStream ds = new DataInputStream(is);

    render file: ds, contentType: "image/png"
}

Но когда я получаю изображение в ответ, оно кодируется странными символами. Как извлечь изображение и правильно декодировать, чтобы оно могло быть отрисовано браузером?

1 ответ

  1. Я решил вашу проблему путем преобразования inputStream в Base64.Закодируйте код getbyte из этой визуализации в Veiw.

    def renderPNG () {
     URL url = new URL("http://tineye.com/images/widgets/mona.jpg");
                BufferedImage img = ImageIO.read(url);
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                ImageIO.write(img, "png", baos);
                InputStream is = new  ByteArrayInputStream(baos.toByteArray()); 
          render(Base64.encode(is?.getBytes()))
    }
    

    Java script code fetch the image

     /* fetch the user image */
                $.ajax({
                    url: "/controller/renderPNG",
                    type: 'GET',
                    cache: false,
                    success: function (result) {
                        document.getElementById('userImage').src = "data:image/png;base64," + result;
                    }
                });
    

    HTML код, где мы хотим сделать изображение

    <div><img id="userImage" src=""alt="User Image"></div>