Как встраивать изображения из базы данных в веб-страницы - PullRequest
3 голосов
/ 20 января 2011

Одним из возможных способов хранения изображений в базе данных является поток битов. Это работает как механизм хранения, но я не могу понять, как встраивать эти данные в веб-страницу в виде изображения, когда я извлекаю его для выполнения запроса клиента.

Я работаю с сервлетами на Java. Кто-нибудь может дать мне руководство?

Ответы [ 2 ]

1 голос
/ 20 января 2011

Возможно, вы захотите написать сервлет, который читает BLOB из базы данных и копирует непосредственно в HttpServletRequest.getOutputStream(), не забывая установить тип содержимого в соответствующем формате (например, image / png).

Идентификатор базы данных или ключ или что-либо еще может быть закодировано в пути (/ image / foo) или передано в качестве параметра запроса (/ image? Id = foo). Этот путь используется в вашем теге <img>.

Это, вероятно, лучше всего написано на реальном Java, а не на JSP или подобных технологиях представления.

0 голосов
/ 20 января 2011

Позвольте мне поделиться тем, что я делаю с файлами изображений и динамической генерацией HTML, и почему - я считаю, что это нестандартный подход, не стесняйтесь комментировать или использовать такую ​​систему, если она работает для вас. :)

У меня есть несколько параметризованных html, таблиц стилей и файлов изображений, которые помещаются в html и сохраняются как файл [clientid] .jar на стороне сервера. Пользовательский интерфейс основан на апплетах. В неурочное время апплет запрашивает файл (и связанную логику) из сервлета после надлежащей аутентификации. Сервлет упаковывает весь JAR-файл в виде байтового массива, инкапсулирует его содержимое (из предопределенного каталога в Unix FS) и бизнес-логику (из базы данных) в объект FileXfer и отправляет его в ObjectOutputStream. Апплет извлекает байты и сохраняет файл jar как файл tmp в tmpdir с флагом deleteOnExit.

Во время выполнения, когда требуется отобразить html, апплет извлекает необходимые файлы из архива и сохраняет их в том же каталоге, фильтруя html в соответствии с требованиями бизнес-логики. Файлы изображений (jpeg, png и т. Д.) Не фильтруются. Все такие файлы - deleteOnExit, поэтому после выхода из приложения не остается места. Затем он открывает HTML с вкладкой браузера, и все, что мне нужно отобразить, там в правильном формате. Апплет имеет логику извлечения файлов - например, не извлекать «logo.png», если он был извлечен 15 секунд назад для отображения другого фрагмента HTML и т. Д.

Преимущества, которые я вижу:

  1. Я получаю автоматическое сжатие байтов, которые мне нужно передать с сервера клиенту, ускоряя передачу примерно в 3 раза, (jar использует сжатие zip)

  2. Клиент (апплет) берет на себя нагрузку фильтрации html, освобождая тем самым сервер от той же работы

  3. Нет хранения больших двоичных файлов изображений на БД (где-то я читал, что сгустки не совсем эффективны для операций с БД)

  4. HTML можно редактировать независимо, используя стандартные теги img, предполагая, что файл изображения находится в $ cwd

  5. [clientid] .jar Содержимое файла не включено в jar, содержащий класс апплета, что позволяет апплету загружаться и запускаться быстрее.

TIA за ваши комментарии, - M.S.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...