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));
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!
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();
}
}
[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: [/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’