powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Отображение байтов, а не картинки при связке js+jsp
4 сообщений из 4, страница 1 из 1
Отображение байтов, а не картинки при связке js+jsp
    #39196592
AK1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С SpringMVC контроллера на страницу JSP передается ProductEntity, вида

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class ProductEntity {
    private Long id;
    private Integer categoryId;
    private Long price;
    private String productName;
    private String productDescription;
    private Byte isActive;
    private Integer manufacturerCountryId;
    private byte[] image; //image in bytes
    private CategoryEntity category;
    private ManufacturerCountryEntity manufacturerCountry;
   
    //getter@setter
}



на вью отображается вот так

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
                                    <p class="product-image">
                                        <a href="/imageDisplay?id=#{product.id}"
                                           rel="" title="${product.productName}" id="zoom1" class="cloud-zoom">
                                            <img src="/ShowImage?id=#{product.id}" width="300" height="300"
                                                 alt="{product.productName}" title="${product.productName}"/> </a>

                                        <a id="zoom-btn" class="lightbox-group zoom-btn-small"
                                           href="/imageDisplay?id=?#{product.id}"
                                           title="#{product.productName}">Zoom</a>
                                    </p>



imageDisplay и ShowImage по сути работают одинаково, просто первый преобразует байты в изображение через контроллер, а второй через сервлет,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    @RequestMapping(value = "/imageDisplay", method = RequestMethod.GET)
    public void showImage(@RequestParam("id") Long itemId, HttpServletResponse response,HttpServletRequest request)
            throws ServletException, IOException {

        System.out.println(itemId);
        ProductEntity product = productService.getProductById(itemId);
        System.out.println(itemId);
        response.setContentType("image/jpeg, image/jpg, image/png, image/gif");

        response.getOutputStream().write(product.getImage());

        response.getOutputStream().close();

    }


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("image/jpeg");
        OutputStream out = response.getOutputStream();
        try {
            long id = Integer.valueOf(request.getParameter("id"));
            ImageService imageService = (ImageService) getServletContext().getAttribute("imageService");
            byte[] image = imageService.getImage(id);

            InputStream in = new ByteArrayInputStream(image);
            BufferedImage bufferedImage = ImageIO.read(in);
            ImageIO.write(bufferedImage, "jpg", out);
            bufferedImage.flush();
//            response.setContentLength(image.length);
//            out.write(image);
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            out.close();
        }
    }



на вью находится скрипт
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
                                        <script type="text/javascript">
                                        jQuery(function ($) {

                                            $(".lightbox-group").colorbox({
                                                rel: 'lightbox-group',
                                                opacity: 0.5,
                                                speed: 300
                                            });
                                            $(".cloud-zoom-gallery").first().removeClass("cboxElement");
                                            $(".cloud-zoom-gallery").click(function () {
                                                $("#zoom-btn").attr('href', $(this).attr('href'));
                                                $("#zoom-btn").attr('title', $(this).attr('title'));

                                                $(".cloud-zoom-gallery").each(function () {
                                                    $(this).addClass("cboxElement");
                                                });
                                                $(this).removeClass("cboxElement");
                                            });

                                        });

                                        jQuery(function ($) {
                                            var t;
                                            $(window).resize(function () {
                                                clearTimeout(t);
                                                t = setTimeout(function () {
                                                    $(".cloud-zoom-gallery").first().click();
                                                }, 200);
                                            });
                                        });

                                        </script>



этим скриптом при нажатии на Zoom открывается галерея изображений с возможностью перелистывать картинки, вот только при нажатии на Zoom отображаются не картинки, а байты.

Как можно решить?
Думаю проблема из-за дополнительного запроса, скрипт принимает байты до их обработки и преобразования в изображение.
Сейчас попробую сразу передавать изображение, правда не знаю насколько это будет практично.
...
Рейтинг: 0 / 0
Отображение байтов, а не картинки при связке js+jsp
    #39196668
AK1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так и есть, проблема решилась предварительным созданием картинки. И еще насчет места хранения картинок, лучще в базе, на диске+путь в базе, на диске в директориях(название директории - ид товара) ?
...
Рейтинг: 0 / 0
Отображение байтов, а не картинки при связке js+jsp
    #39196729
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AK1988Так и есть, проблема решилась предварительным созданием картинки. И еще насчет места хранения картинок, лучще в базе, на диске+путь в базе, на диске в директориях(название директории - ид товара) ?
хранить лучше на диске, вне дериктории web приложения, (т.к. при деплое эта папка переписывается и все картинки будут потеряны)
но из страницы доступго только файлы ,находящиеся в папке веб приложения. поэтоу это есть небольшая проблема.
имена файлов надо хранить в безе . как организовать структуру папок - по барабану, главное , чтоб в конечной папке было не боеле 500 файлов, иначе будут тормоза...
...
Рейтинг: 0 / 0
Отображение байтов, а не картинки при связке js+jsp
    #39196730
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут ещё ессть проблема - если разработка под окнами - а продакшен под линуксом - пути к файлам картинок - разные , надо это учитывать.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Отображение байтов, а не картинки при связке js+jsp
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]