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

У меня есть изображения, которые хранятся в базе данных как BLOB. Теперь я могу отображать их на страницах jsf с помощью тега Richfaces mediaOutput.

Возможно ли, чтобы изображения имели путь типа "/images/image.jpg", пока изображения хранятся в базе данных.

При поиске ответа я нашел что-то вроде этого:

@GET
@Path("/files/{filename}")
@Produces(MediaType.WILDCARD)

С уважением, Илья Сидорович

Ответы [ 2 ]

4 голосов
/ 20 февраля 2012

Вы можете написать сервлет, собирающий каждый запрос к /image/* или что-то, что вам подходит.И в вашем сервлете вы получаете правильные данные из вашей базы данных через параметры запроса.И вы записываете данные через

response.getOutputStream().write(content); 

(содержимое является байтовым массивом вашего изображения)

1 голос
/ 06 марта 2012

Спасибо, Рол и BalusC!

Если кто-то сталкивается с этой проблемой, вот что вы можете сделать.

    package org.gicm.test;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.inject.Inject;
import java.io.BufferedOutputStream;
import java.io.BufferedInputStream;
import org.gicm.cms.CMSDao;
import org.gicm.model.UploadedImage;

@WebServlet("/images/*")
public class TestServlet extends HttpServlet {

    @Inject
    private CMSDao cms;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String imageId = String.valueOf(request.getPathInfo().substring(1)); // Gets string that goes after "/images/".
        UploadedImage image = cms.findImage(imageId); // Get Image from DB.

        response.setHeader("Content-Type", getServletContext().getMimeType(image.getName()));
        response.setHeader("Content-Disposition", "inline; filename=\"" + image.getName() + "\"");

        BufferedInputStream input = null;
        BufferedOutputStream output = null;

        try {
            input = new BufferedInputStream(image.getData()); // Creates buffered input stream.
            output = new BufferedOutputStream(response.getOutputStream());
            byte[] buffer = new byte[8192];
            for (int length = 0; (length = input.read(buffer)) > 0;) {
                output.write(buffer, 0, length);
            }
        } finally {
            if (output != null) try { output.close(); } catch (IOException logOrIgnore) {}
            if (input != null) try { input.close(); } catch (IOException logOrIgnore) {}
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...