Bom dia, estou com um problema e gostaria da ajuda de voces.
Preciso salvar uma imagem no banco de dados de uma aplicaçao Web.
Quando executo em minha máquina local funciona sem problemas mas, quando fiz o deploy da aplicaçao para o servidor veio o problema.
Uso o seguinte codigo na minha classe DAO que insere a imagem no PreparedStatement:
(O método preferenciaContrato.getCaminhoImagem() retorna a url da imagem ex: C:\diretorio\imagem.jpg)
declaracao = conexao.prepareStatement(sql.toString());
File arquivo = new File(preferenciaContrato.getCaminhoImagem());
FileInputStream inputStream = new FileInputStream(arquivo);
declaracao.setBinaryStream(i++, inputStream, (int) arquivo.length());
declaracao.executeUpdate();
Porém, como a classe DAO está no servidor este caminho (da imagem) nao é encontrado. E me retorna o seguinte erro:
A questão é: Como eu faço para fazer este UpLoad da imgem e salva-la no banco de Dados?
1º) Você tem que colocar para seu form de cadastro enviar os dados em multipart, acrescentando: enctype=“multipart/form-data”
2º) Você pega o InputStream do seu file proveniente do form
3º) Se no seu Banco de Dados o campo for Blob ou LongBlob, você pega o InputStream converte para Blob e grava no banco…
É isso ae…
christianovale
Ok! E como ficaria isto? Assim?
é apenas isto?
O
offString
Cara, não sei como está o andamento do seu projeto, se estiver na fase final creio que minha dica não vá valer a pena.
Nas apliações web aqui da universidade, costumamos guardar no banco uma String com o caminho da imagem, ao inves da imagem em si. Poupa hd e deixa o sistema mais rapido.
christianovale
Nao, cara, guardar apenas o caminho nao é boa soluçao pois se a url for perdida ou se o cara apagar a imagem o sistema gera erro.
Preciso realmente fazer o upload da imagem para o BD.
ricardosoares
Acho que está faltando vc fazer o upload do arquivo pro servidor.
Suponho que o arquivo “C:\Documents and Settings\Christiano\Meus documentos\christiano\doidinho.jpg” esteja no computador cliente, onde roda o browser. Logo, o computador servidor, que roda o Tomcat, não o encontra.
Upload!!!
PS: Acho mais adequado guardar a imagem no BD e não em sistema de arquivo com apontamento. Fica mais organizado e, se vc usar uma tabela exclusivamente para as imagens, não afeta a performance.
christianovale
Pois é exatamente este o meu problema.
Eu jah tenho uma funcao que guarda e recupera a imagem em um campo Blob do MySql.
Mas estou tendo dificuldades em fazer o Upload desta imagem para o banco dados que está no servidor. Local funciona normalmente mas eu preciso que meu formaulario envie a imagem para o Banco de dados.
the_negao
Utilize o commons-fileupload.jar…
Verificar se o form é multipart:
if (FileUpload.isMultipartContent(request)) {
...
}
2) Pegar o file do Form:
Ola, Sergio, obrigado pela ajuda mas, ainda nao consegui fazer.
Voce poderia me dar um exemplo funcional disto?
Obrigado.
zirocool
BooleanisMultiPart=FileUpload.isMultipartContent(request);if(isMultiPart){FileItemFactoryfactory=newDiskFileItemFactory();ServletFileUploadupload=newServletFileUpload(factory);try{Listitems=upload.parseRequest(request);Iteratoriter=items.iterator();intidImagem=0;while(iter.hasNext()){FileItemitem=(FileItem)iter.next();if(item.isFormField()){if(item.getFieldName().equals("idImagem"))idImagem=Integer.parseInt(item.getString());}else{if(item.getName().length()>0)gc.insereImagem(idImagem,item);}}}catch(FileUploadExceptione){System.err.println("Erro ao parsear requisiçao!");e.printStackTrace();}catch(Exceptione){System.err.println("Ocorreu um erro geral...");e.printStackTrace();}}
publicvoidinsereImagem(intidContato,FileItemitem){try{Stringsql="UPDATE contato SET foto = ? "+"WHERE id_contato = ? ";DataBasedb=newDataBase();Connectionconn=db.open();PreparedStatementpstm=conn.prepareStatement(sql);/* File imagem = new File( path ); FileInputStream imagemStream = new FileInputStream( imagem );*/pstm.setBinaryStream(1,item.getInputStream(),(int)item.getSize());pstm.setInt(2,idContato);pstm.executeUpdate();pstm.close();conn.close();db.close();}catch(SQLExceptionex){System.err.println("Erro ao tentar inserir imagem!!\n");ex.printStackTrace();}catch(IOExceptione){System.err.println("Erro ao inserir InputStream no banco!\n");e.printStackTrace();}}