Salvar imagem em campo Blob no Firebird [RESOLVIDO!]
8 respostas
B
bruninhatp
Oi pessoal, boa noite!
To com muita urgência de resolver isso, pois tenho até amanhã cedo pra entregar o projeto.
É o seguinte, eu preciso salvar a imagem de cadastro do cliente em um campo blob do firebird. Pego do disco, converto em blob e faço um setBlob, porém, dá um erro na inserção do Blob.
Não posso deixar a imagem no disco, tenho que, obrigatoriamente, apagá-la após o processo…
Alguém já passou por isso!??!
Versão do firebird 2.1
Oi Cerjr, obrigada pela atenção. Já tinha visto esse tópico e fiz isso. Realmente funciona e não da erro. Só que quando fui ler a imagem do banco e mostrar na jsp, não deu certo. Pega o valor da coluna, porém não consegui converter em imagem e jogar na jsp…
É que sou iniciante em web e nesse caso não tive tempo de me aprofundar no assunto. Estou tentando resolver para depois estudar com calma…
Mas muito obrigada!
:?
C
Cerjr
vc está usando algum framework tipo struts, vraptor???
No vraptor por exemplo eu deixo a tag img apontando direto para um método no logic e
neste método eu apenas pego o byte array e jogo no response…
B
bruninhatp
Cerjr:
vc está usando algum framework tipo struts, vraptor???
No vraptor por exemplo eu deixo a tag img apontando direto para um método no logic e
neste método eu apenas pego o byte array e jogo no response…
Estou trabalhando só com servlets e jsp mesmo…
Andei lendo a respeito do Struts e Vraptor, mas não utilizei nenhum…
C
Cerjr
Bem, se o problema for como mostrar a imagem vc pode tentar assim…
Não sei se é a melhor maneira pois só trabalhei com Servlets quando estava na faculdade, mas acho que isto resolve.
publicclassMostraImagemextendsHttpServlet{protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{processRequest(request,response);}protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{processRequest(request,response);}privatevoidprocessRequest(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{Filefile=newFile("C:/teste.jpg");FileInputStreamfis=newFileInputStream(file);byte[]bytes=newbyte[newLong(file.length()).intValue()];//no seu caso vc busca a imagem do banco e em seguida seta no responsefis.read(bytes);response.setContentType("image/jpeg");OutputStreamout=response.getOutputStream();out.write(bytes);fis.close();out.close();}}
e no jsp vc faz uma chamada assim:
B
bruninhatp
Cerjr:
Bem, se o problema for como mostrar a imagem vc pode tentar assim…
Não sei se é a melhor maneira pois só trabalhei com Servlets quando estava na faculdade, mas acho que isto resolve.
publicclassMostraImagemextendsHttpServlet{protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{processRequest(request,response);}protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{processRequest(request,response);}privatevoidprocessRequest(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{Filefile=newFile("C:/teste.jpg");FileInputStreamfis=newFileInputStream(file);byte[]bytes=newbyte[newLong(file.length()).intValue()];//no seu caso vc busca a imagem do banco e em seguida seta no responsefis.read(bytes);response.setContentType("image/jpeg");OutputStreamout=response.getOutputStream();out.write(bytes);fis.close();out.close();}}
e no jsp vc faz uma chamada assim:
Entendi! Vou tentar seu código. A parte da chamda à servlet pela tag html de imagem eu já faço!
Muuuuuuuuito obrigada Cerjr!!!
Bjão
B
bruninhatp
[color=orange][Cerjr, muito obrigada pela atenção!][/color]
É pessoal, quando se está com a cabeça cansada, não adianta ficar insistindo. Vá dormir e recomece depois! Aí funciona!
Para salvar imagem em campos Blob no Firebird e recuperá-la na servlet e mostrar na jsp:
Salvar no banco:
/* Converte a imagem do disco em um array de bytes */byte[]fileBlob;FileInputStreamfis;FilepFoto=newFile(pathFotoCad);intfileLength=0;fis=newFileInputStream(pFoto);fileLength=(int)pFoto.length()+1;fileBlob=newbyte[fileLength];fis.read(fileBlob);/* ...SQL */pstm.setBytes(3,fileBlob);