Bom dia,
estou realizando uploads de imagens usando o Commons IO da Apache e salvando no Postgresql como blobs. Consigo resgatá-las do banco e exibi-las no navegador usando response.getOutputStream().
Porém quando vou salvá-las do Firefox para o PC, ela vem como ‘.html’ e, mesmo alterando a extensão, o navegador informa “A imagem ‘xxx’ contém erros e não pode ser exibida.”. Quando salvo no Internet Explorer ela é salva como ‘.bmp’ e abre como tal.
Uso este código para exibi-las:
response.setContentType("image/jpg");
OutputStream outputStream = response.getOutputStream();
outputStream.write(imagem.getBytes()); //'imagem' é o objeto que contém o array de bytes.
outputStream.flush();
outputStream.close();
Tentei este também, que salva como ‘.png’ mas também dá o mesmo erro:
BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(imagem.getBytes()));
response.setContentType("image/png");
OutputStream outputStream = response.getOutputStream();
ImageIO.write(bufferedImage, "png", outputStream);
Alguma configuração que deve ser feita antes da exibição, ou no momento de salvar no banco? Uso JPA.
Qual o tipo da imagem que vc salvou no banco de dados? Vc tem que informar esse mesmo tipo no contenttype.
Imagens ‘.jpg’… tentei com
response.setContentType(“image/jpg”) e response.setContentType(“image/jpeg”), como também response.setContentType(“image/png”) e response.setContentType(“image/gif”) para ‘.png’ e ‘.gif’, e por aí vai…
etc., mas não dá certo na hora de salvar do Firefox, só em exibir. :-o
Resolvido, bastou definir o cabeçalho do HttpServletResponse para o arquivo abrir diretamente no visualizador de imagens do usuário.
response.setHeader("Content-Disposition", "attachment; filename=imagem.png");
Pessoal estou com esse mesmo problema, mas não consegui resolver desta forma que vocês fizeram. Sera que teria alguma outra forma? Meu código está assim.
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{
String nomeArquivo = "C:/Users/Samuel Alves/Pictures/upload/roots.jpg";
File file = new File(nomeArquivo);
FileOutputStream fileOut = new FileOutputStream(file);
fileOut.write(nomeArquivo.getBytes());
fileOut.flush();
fileOut.close();
response.setContentType("image/jpg");
response.setHeader("Content-Disposition", "attachment; filename=roots.jpg");
ServletOutputStream os = response.getOutputStream();
os.write(nomeArquivo.getBytes());
os.flush();
os.close();
}
response.setHeader("Content-Disposition", "attachment; filename=imagem.png");