Imagem

Embed Size (px)

Citation preview

  • 5/23/2018 Imagem

    1/5

    Upload de imagens para banco de dados (mysql) com

    Java Server Pages

    Neste artigo explicarei os mtodos para se trabalhar com imagens em Banco de Dados.

    Mais especificamente estarei abordando este tema utilizando o MySQL e um componentedo projeto jakarta chamado FileUpload.

    Pra comear precisamos instalar e configurar o ambiente. Voc precisar do MySQL, que

    pode ser encontrado em: http://www.mysql.comou, se preferir, poder criar uma conta em

    http://www.freesql.comque um servidor MySQL free.

    Pronto, feito isso, preciso baixar e instalar o componente FileUpload do projeto Jakarta.

    Este pode ser encontrado em http://jakarta.apache.org/commons/fileupload. Para instalar o

    componente, basta descompact-lo em uma pasta qualquer e copiar o arquivo commons-

    fileupload-1.0.jar para a pasta $CATALINA_HOME/commons/lib (para disponibilizar paratodos os webapps), ou para a pasta seu_web_app/WEB-INF/lib (para que somente a sua

    aplicao tenha acesso ao componente).

    Feito isso, o ambiente est devidamente preparado para comearmos. Para facilitar

    utilizarei neste exemplo uma tabela simples com apenas trs campos (sendo um

    autonumervel, um texto e, por fim, um do tipo Blob).

    Para criar a Tabela:

    create table foto (

    id tinyint(4) not null auto_increment,comentario longtext not null,

    foto blob not null,

    primary key (id) );

    Pronto, nossa tabela est criada.

    Atente para o tipo do campo foto (BLOB Binary Large Object) , que o tipo perfeito para

    armazenarmos fotos, j que uma foto (aqui, em especial, JPEG) um arquivo binrio e

    geralmente grande (200kb em mdia).

    Bom, agora teremos que construir o nosso formulrio que ir chamar a pgina JSP para

    incluso da imagem no banco de dados. Neste tutorial no farei os testes de consistncia,para ver se todos os (dois) campos foram preenchidos, mesmo porque essa no a idia

    deste artigo.

    Inclusao de Fotos

  • 5/23/2018 Imagem

    2/5

    Incluir foto no banco de dados



    At aqui normal, a nica diferena foi o atributo enctype="multipart/form-data"na tag

    . Este atributo informa que o formulrio ir enviar na requisio, alm de puro texto,

    dados binrios (imagens, arquivos, etc.).

    Bom, chegou a hora de codificarmos!!!! Aqui abordarei como fazer usando paginas JSP,

    para fazer com servlet o mtodo praticamente o mesmo (s ir mudar o nome de algunsobjetos, caso voc os declare com nome diferente), alis, no fim tudo vira servlet mesmo

    !!! Bom, mas antes de comear a codificar voc precisa incluir no seu projeto o commons-

    fileupload-1.0.jar. Para isso (usando o eclipse) selecione o seu projeto na janelinha Package

    Explorer e depois v em Project -> Properties. Feito isso uma janela se abrir. Clique agora

    em Java Build Path (que fica a esquerda na janela), depois clique na aba Libraries. Clique

    no no boto Add External Jars... E selecione o commons-fileupload-1.0.jar

    Agora sim ta tudo pronto para comearmos de fato!

    Aqui segue um cdigo de uma classe Java bem simples s para automatizar a criao de

    conexo com o banco de dados:

    Arquivo MyConnection.java:

    packagemypackage;

    importjava.sql.Connection;

    importjava.sql.DriverManager;

    importjava.sql.SQLException;

    /**

    *@authorDarkseid

    *

    *Classe utilizada para estabelecer conexao com o banco de dados

    */

    publicclassMyConnection {

    staticConnection con=null;

    /**

    * Construtor

    */

    publicMyConnection() {

    super();

    }

    //cria conexao com o banco de dados

    publicstaticConnection createConnection(String banco) throwsException {

  • 5/23/2018 Imagem

    3/5

    try{

    // instanciando o driver

    Class.forName("com.mysql.jdbc.Driver");

    con = DriverManager.getConnection

    ("jdbc:mysql://www.freesql.org/" +banco, "usuario", "senha");

    }catch(ClassNotFoundException e) {

    thrownewException("Driver nao encontrado");

    }catch(SQLException e) {

    thrownewException("Erro com o banco de dados");

    }

    returncon;

    }

    // fecha a conexao

    publicstaticvoidcloseConnection () throwsDAOException {

    try{

    if(!con.isClosed())

    con.close();

    } catch(SQLException e) {

    thrownewDAOException ("Nao foi possivel fechar a conexao");

    }

    }

    }

    //------------------------------------------------------------------------------------------------------

    Abaixo segue o cdigo do arquivo gravaFoto.jsp

  • 5/23/2018 Imagem

    4/5

    // carregando a foto no array

    upload.read(imagem, 0, size);

    // chamado o mtodo esttico para conectar com o banco

    Connection con = MyConnection.createConnection("bolao");

    // onde tem ?, ser substitudo por valores posteriormente.

    PreparedStatement pstm = con.prepareStatement("INSERT INTO

    foto (comentario, foto) VALUES (?, ?)");

    // inserindo o comentrio no lugar da primeira interrogao

    pstm.setString(1, cmt);

    // inserindo a foto no lugar da segunda interrogao

    pstm.setBytes(2, imagem);

    // executando a query

    pstm.executeUpdate();

    }

    }

    } catch(FileUploadException e) {

    out.print(Erro no upload do arquivo);

    } catch(SQLException e) {

    out.print(Erro na consulta com o banco de dados);} catch(Exception e) {

    out.print(e.getMessage());

    }else{

    out.print(O Formulario nao possui dados binrios)

    }

    } %>

    Fonto inserida com sucesso no banco de dados!

    Bom, agora falta exibir a foto na pagina JSP, certo?! Para isso vou criar uma classe queconverte uma seqncia de bytes em JPEG. Ah, antes que eu me esquea esse cdigo do

    Farnetani!

    public classJPGManager {

    static publicvoidencodeJPG(OutputStream out,byte[] image) throwsIOException{

    intBUFFER = image.length;

    InputStream fs = newByteArrayInputStream(image);

    JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(fs);

    BufferedImage bImage = decoder.decodeAsBufferedImage();

    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

    encoder.encode(bImage);

    fs.close();

    fs = null;

    encoder = null;

    bImage = null;

    }

    }

    O que resta a fazer agora simplesmente criar uma JSP para pegar no banco o contedo do

    campo BLOB e passa-lo como parmetro para a funo acima, juntamente com o

  • 5/23/2018 Imagem

    5/5

    OutputStream do servlet (pois na verdade uma pagina jsp transformada em servlet antes

    de ser compilada).

    Arquivo verFoto.jsp

    Erro encontrado

    Terminamos! Para ver suas fotos, basta chamar

    http://localhost:8080/sua_aplicacao/verFoto.jsp?numero=x

    Onde x o numero da foto que deseja visualizar.

    Bom, isso, espero que tenham gostado! Qualquer dvida, sugesto ou crtica:

    [email protected]