Задать вопрос

Выдача картинок сервлетом из базы

Возникла проблема: в базе данных в бинарном виде хранится изображение. Сервлет формирует страницу. Как в добавить изображение на эту страницу? Т.е. так сформировать путь к изображению?
  • Вопрос задан
  • 3086 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
Случаем не на GAE подсели, и картинки из датасторе вытягиваете? :)

Я так предлогаю:
В
А на /images/picture.gif — замаплен отдельный сервлет, который и отдает только картинку в бинарном виде.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
taliban
@taliban
php программист
Не знаю как работают Ваши сервлеты, но вообще ест два способа показыват изображения из базы, простой но с нагрузкой и сложный но с уменьшенными рессурсами:
1. отдаем изображение через сервер, по отдельному урлу, который генерит заголовок изображения и выплевывает данные в бинарном виде, браузер сам все сделает, адрес будет вида: mysite.com/get/image/1234/
2. Перед выводом сохраняем изображение в отдельную папочку, и прописываем путь к ней на странице, получится нормальный адрес: mysite.com/images/1234.jpeg
Естественно при втором подходе нужно учитывать что изображения может не быть, и при 404 делать редирект на адрес который создаст изображение на диске.
Ответ написан
asm0dey
@asm0dey
есть еще вариант. вытаскиваем картинку в бинарном виде — base64 encode — img src через data url
Ответ написан
Комментировать
Foror
@Foror
Графоман
Делаете отдельный сервлет, который на doGet (или как там метод называется на обработку request'а клиента) читает из URL название/id изображения. Дальше он смотрит (в Map, например) есть уже сохраненное на диск изображение. Если есть, то открывает это файл на чтение. Если нет, то открывает базу на чтение бинарных данных и копируем их на диск. Затем тоже открывает файл на диске на чтение.

Ну а дальше, на response устанавливаем нужные header (image/jpeg, png и т.д.), смотрите подробности в mime. И читаем данные с диска и пишем в response.

Примерно так :) А еще лучше, разработать более сложную систему кеширования и в добавлять конкретное название файла на диске. А дальше, nginx'ом можно отдавать эту статику.

location ~ ^/(img)/ {
root /usr/share/tomcat5.5/webapps/myproject/ROOT;
}

Где в ROOT есть каталог img и соотвественно при запросах /img/some.jpg nginx будет искать в папке ROOT/img файл some.jpg и отдавать его.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы