Salvar imagem em campo Blob no Firebird [RESOLVIDO!]

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

Conversão da imagem do disco em Blob:

/* converte a imagem do disco em blob */
InputStream ins = new FileInputStream(new File(pathFoto));
Blob foto	        = new SerialBlob(ConvertImage.streamToByteArray(ins));

Help meeee!!!
Muito obrigada! :frowning:

Ninguém pode me ajudar!!!..

Espero que te ajude…

http://javafree.uol.com.br/topic-856942-Gravando-imagem-no-Firebird.html

[quote=Cerjr]Espero que te ajude…

http://javafree.uol.com.br/topic-856942-Gravando-imagem-no-Firebird.html

[/quote]

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!

:?

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…

[quote=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…

[/quote]

Estou trabalhando só com servlets e jsp mesmo… :frowning:
Andei lendo a respeito do Struts e Vraptor, mas não utilizei nenhum…

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.

        public class MostraImagem extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}
	
	private void processRequest(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{

		File file = new File("C:/teste.jpg");
		FileInputStream fis = new FileInputStream(file);
		byte[] bytes = new byte[new Long(file.length()).intValue()];
                //no seu caso vc busca a imagem do banco e em seguida seta no response
		fis.read(bytes);
		
		response.setContentType("image/jpeg");    
		OutputStream out = response.getOutputStream();
		out.write(bytes);	
                fis.close();	
		out.close();
	}
}

e no jsp vc faz uma chamada assim:
teste

[quote=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.

        public class MostraImagem extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}
	
	private void processRequest(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{

		File file = new File("C:/teste.jpg");
		FileInputStream fis = new FileInputStream(file);
		byte[] bytes = new byte[new Long(file.length()).intValue()];
                //no seu caso vc busca a imagem do banco e em seguida seta no response
		fis.read(bytes);
		
		response.setContentType("image/jpeg");    
		OutputStream out = response.getOutputStream();
		out.write(bytes);	
                fis.close();	
		out.close();
	}
}

e no jsp vc faz uma chamada assim:
teste[/quote]

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

[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;   
FileInputStream fis;   
File pFoto		= new File(pathFotoCad);
int fileLength 	= 0;   
fis 	                = new FileInputStream(pFoto);   
fileLength  	                = (int)pFoto.length() + 1;   
fileBlob    	                = new byte[fileLength];   
fis.read(fileBlob);   

/* ...SQL */
pstm.setBytes(3, fileBlob);

Recuperando a imagem

/* getBytes no campo imagem */
byte[] bytes              = rs.getBytes("FOTO");

/* Seta a imagem no response da Servlet */				
response.setContentType("image/jpeg");       
out.write(bytes);    

E faz a chamada à Sevlet pela jsp:
img alt=‘teste’ src=‘GetImage’

Valeu pessoal!