…Continuando  nosso artigo como Trabalhar com fotos em Java

            Vamos criar nossa classe de manipulação de imagens, mas antes é necessário saber que, quando o nosso usuário for acessar nossa aplicação, e inserir uma imagem no banco de dados, internamente o sistema executará um servlet, que será responsável por fazer um upload dessa imagem para o nosso servidor de aplicação.

Para realização do Upload, usaremos o componente <ice:inputFile>, do framewok IceFaces e para isso devemos configurar um ManagedBean em nosso arquivo de contexto faces-config.xml, da seguinte maneira:

<faces-config version="1.2"

    xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">

     <managed-bean>

        <managed-bean-name>uploadMB</managed-bean-name>

        <managed-bean-class>com.ManageBean.UploadMB</managed-bean-class>

        <managed-bean-scope>session</managed-bean-scope>

    </managed-bean>

</faces-config>

Caso não tenha o framework instalado acesse: http://www.icefaces.org/main/downloads/

UPLOAD

Nossa página de visualização de upload(a que o usuário estará vendo ao desejar inserir uma imagem no servidor), será assim:

<f:view>

        <html>

            <head>

                <title>Inserindo foto</title>

            </head>

            <body>

                <center>

                    <ice:form id="form1">

                        <ice:panelGrid>

                            <font face="Arial" color="Black">

                                <ice:outputText value="Clique *Procurar* para encontrar a foto desejada e depois *Enviar* " />

                            </font>

                            <br/>

                            <ice:inputFile id="inputFileComponent" file="#{uploadMB.arquivo}" uniqueFolder="false" label="Enviar"

                            action="#{uploadMB.gravarImagem}"

                           />

                            <br/>

                            <ice:message for="inputFileComponent"/> <br/>

                            <font color="red" face="Arial" style="bold">

                                <ice:outputText value="#{uploadMB.caminho}" />

                            </font>

                        </ice:panelGrid>

                    </ice:form>

                    <ice:form id="form2">

                        <ice:panelGroup styleClass="componentBox"

                                        xmlns:h="http://java.sun.com/jsf/html"

                                        xmlns:f="http://java.sun.com/jsf/core"

                                        xmlns:ice="http://www.icesoft.com/icefaces/component">

                            <!-- display of all connnection status icons for -->

                            <ice:panelGroup styleClass="exampleBox centerBox outputConnectionStatus" >

                            </ice:panelGroup>

                        </ice:panelGroup>

                    </ice:form>

               </center>

            </body>

        </html>

    </f:view>

Quanto a classe de upload, implementada no servlet acima( upload.gravarImagem...), será descrita assim:

package com.ManageBean;

import java.io.File;

/**

 *

 * @author Carlos Mazzi

 */

public class UploadMB {

    private Integer codBen;

    private File arquivo;

    private String caminho;

    private boolean  status;

    private GravarImagem gravarImagem;

 

    public UploadMB()

    {

       setStatus(false);

       gravarImagem = new GravarImagem();

    }

 

    public boolean isStatus() {

        return status;

    }

 

    public void setStatus(boolean status) {

        this.status = status;

    }

    public File getArquivo() {

        return arquivo;

    }

    public void setArquivo(File arquivo) {

        this.arquivo = arquivo;

        caminho = arquivo.getPath()+ 

        "...Enviado com Sucesso!";

        setStatus(false);

    }

    public String getCaminho(){

        setStatus(true);

        return caminho;

    }

    public GravarImagem getGravarImagem() {

        return gravarImagem;

    }

    public void setGravarImagem(GravarImagem gravarImagem) {

        this.gravarImagem = gravarImagem;

    }

    public void gravarImagem(){

        this.codBen = Uploader.auxCodigo;

 

        this.gravarImagem.GravarImagem(this.codBen, this.arquivo);

    }

DOWNLOAD

E por fim nossa Classe que recuperará uma imagem no banco de dados  será assim:

package Servlets;

import java.io.*;

import java.net.*;

import java.sql.SQLException;

import javax.servlet.*;

import javax.servlet.http.*;

/**

 *

 * @author Carlos Mazzi

 */

public class DownloadServletBlob extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException, SQLException {

        response.setContentType("text/html;charset=UTF-8");

 

        ServletOutputStream out = response.getOutputStream();

        String cod = request.getParameter("id");

        String Tela = request.getParameter("Tela");

        int id;

        if (cod == null || cod.equals("")) {

            id = 0;

        } else {

            id = Integer.parseInt(cod);

        }

        if (id == 0) {

            try {

                byte[] blob = new BlobManager().consultarConfSistema();

 

                if (blob != null) {

                    out.write(blob);

                    out.flush();

                    out.close();

                }

 

            } finally {

                out.close();

            }

        } else {

            if (Tela == null || Tela.equals("")) {

                try {

                    byte[] blob = new BlobManager().consultar(id);

 

                    if (blob != null) {

                        out.write(blob);

                        out.flush();

                        out.close();

                    }

 

                } finally {

                    out.close();

                }

            } finally {

                    out.close();

                }

            }

        }

    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">

    /**

     * Handles the HTTP <code>GET</code> method.

     * @param request servlet request

     * @param response servlet response

     */

    protected void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        try {

            processRequest(request, response);

        } catch (SQLException ex) {

            ex.printStackTrace();

        }

 

    }

 

    /**

     * Handles the HTTP <code>POST</code> method.

     * @param request servlet request

     * @param response servlet response

     */

    protected void doPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        try {

            processRequest(request, response);

        } catch (SQLException ex) {

            ex.printStackTrace();

       } }

 

    /**

     * Returns a short description of the servlet.

     */

    public String getServletInfo() {

        return "Short description";

    }

// </editor-fold>

}

            O fator preponderante aqui é a transição byte a byte que essa classe faz para recuperar uma imagem no banco de dados. Tanto para o armazenamento quanto para sua recuperação, ou seja, trata-se de um processo de download e upload do servidor para o cliente, vice-versa.

                Pronto... agora é só apresentar para a camada do cliente em uma tela .jsp comum, segue o exemplo:

<div align="center"><img src="DownloadServletBlob?id=<%=Codigo%>" width="118" height="106"/> <br>

                Onde DownloadServletBlob, trata-se da nossa classe de download(servidor->cliente) e o parâmetro código para trazer sua imagem do seu banco de dados de acordo com a sua SQL

Por enquanto ficamos por aqui


Um Abraços

Carlos Eduardo