Como pegar uma imagem do banco e jogar no HTML?

5 respostas
gtesu

Olá à todos.
Bom, tenho um trabalho de faculdade para entregar em menos de 10 dias. Nunca tive uma aula sobre esse assunto, então o professor deixou uns exemplos de projeto sobre isso.
A parte de fazer upload da imagem para o banco eu já sei, só não sei como faço para pegar a imagem do banco e jogar para o HTML.

No caso de pegar um texto do banco, seria mais ou menos assim, né?

<ul>
                                <%
                                            List<Ofertas> lista = (List<Ofertas>) request.getAttribute("listaMsgs");
                                            for (Ofertas msg : lista) {
                                 %>
                                <h2><%=msg.getTitulo()%></h2>
                                <%   }%>
                            </ul>

Se alguém poder dar umas dicas sobre isso, eu agradeço muito!

Ah, e o banco que eu uso é o postgres (não sei se faz diferença isso…)

5 Respostas

alias

Cara, primeiramente, o select na sua tabela retornando as imagens está feito? O retorno do banco para o seu objeto deve ser como um array de bytes.

A

gtesu:
Olá à todos.
Bom, tenho um trabalho de faculdade para entregar em menos de 10 dias. Nunca tive uma aula sobre esse assunto, então o professor deixou uns exemplos de projeto sobre isso.
A parte de fazer upload da imagem para o banco eu já sei, só não sei como faço para pegar a imagem do banco e jogar para o HTML.

No caso de pegar um texto do banco, seria mais ou menos assim, né?

<ul>
                                <%
                                            List<Ofertas> lista = (List<Ofertas>) request.getAttribute("listaMsgs");
                                            for (Ofertas msg : lista) {
                                 %>
                                <h2><%=msg.getTitulo()%></h2>
                                <%   }%>
                            </ul>

Se alguém poder dar umas dicas sobre isso, eu agradeço muito!

Ah, e o banco que eu uso é o postgres (não sei se faz diferença isso…)

Vai me dizer que vc usa Scriptlet?

maiconkf

tambem queria saber isso!

gtesu

andredecotia:

Vai me dizer que vc usa Scriptlet?

Eu mal sei o que é isso. Recém to começando a estudar java web!
O trabalho é pra fazer da forma mais simples possível, sem framework…

Bom, voltando a dúvida… achei uns códigos e agora eu to conseguindo fazer o download da imagem. Mas não é isso que eu quero.
Aí vai o código:

@WebServlet(name = "DownloadFile", urlPatterns = {"/downloadFile"})
public class DownloadFile extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String idArquivo = req.getParameter("id");
        String local = req.getParameter("localarmaz");
        Logger.getLogger(DownloadFile.class.getName()).log(Level.INFO, String.format("Nome arquivo [%s]    Local[%s]", idArquivo, local));
        if (idArquivo == null || local == null) {
            resp.sendRedirect("buscarArquivo.jsp");
            return;
        } else {
            if ("ARQUIVO".equals(local)) {
                String msg = String.format("[%s] Precisa encontrar o arquivo no disco,"
                        + " se existir, entregar para o browser"
                        + " se não existir, direcionar para um erro", local);
                Logger.getLogger(DownloadFile.class.getName()).log(Level.INFO, msg);
                msgHtml(req, resp, msg);
            } else {
                try {
                    Arquivo arq = leBD(idArquivo);
                    InputStream in=arq.getConteudo();
                    resp.setContentType(arq.getContentType());
                    resp.setHeader("Content-Disposition", String.format("attachment;filename=%s",arq.getNome()));
                    OutputStream out=resp.getOutputStream();
                    int read=0;
                    byte[] bytes=new byte[1024];
                    while ((read=in.read(bytes))!=-1){
                        out.write(bytes,0,read);
                    }
                    in.close();
                    out.flush();
                    out.close();
                } catch (Exception ex) {
                    throw new ServletException("Não foi possível fazer o download", ex);
                }
            }
        }
    }

    private void msgHtml(HttpServletRequest req, HttpServletResponse resp, String msg) throws ServletException, IOException {
        PrintWriter out = resp.getWriter();
        out.write(String.format("<html><body style='background-color: goldenrod'>%s</body></html", msg));
        out.close();
    }

    private Arquivo leBD(String id) throws NamingException, SQLException {
        Connection conn = null;
        Arquivo arq = new Arquivo();
        try {
            Context context = new InitialContext();
            DataSource dataSource = (DataSource) context.lookup("jdbc/doo2");
            conn = dataSource.getConnection();
            ArquivoDAO dao = new ArquivoDAO(conn);
            arq = new Arquivo();
            arq.setId(Integer.parseInt(id));
            arq = dao.retrieve(arq);
            return arq;
        } finally {
            try {
                conn.close();
            } catch (Exception ex) {
            }
        }
    }
}

O que eu devo mudar para que a imagem seja carregada na página?

Desde já, agradeço.

gtesu

Ah, agora foi… apareceu no navegador.

Eu comentei essa linha:

resp.setHeader("Content-Disposition", String.format("attachment;filename=%s",arq.getNome()));

Da outra ves que eu tinha comentado essa linha, tinha dado erro no browser.

Bom, esse projeto aí é só uma página em html com as opções de fazer upload para o banco ou fazer download.

Eu tenho um outro projeto, que é tipo um site de compras coletivas… como faço para chamar a imagem do banco utilizando esses códigos aí de cima?

Criado 19 de setembro de 2011
Ultima resposta 22 de set. de 2011
Respostas 5
Participantes 4