Upload
scribd2689
View
3
Download
0
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: