Salvar e Exibir Imagem - Banco de Dados

8 respostas
W

Galera do Guj, estou com um problema que, com certeza, vocês irão me ajudar, o problema é o seguinte: estou salvando imagem direto no banco de dados, entretanto não estou conseguindo fazer com que a foto seja exibida na página. abaixo vou postar os códigos:

Minha entidade

@Entity(name = "photo")
public class Photo implements Serializable{
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private Integer id;    
    @Column(name="photo")
    private byte[] photo;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public byte[] getPhoto() {
        return photo;
    }

    public void setPhoto(byte[] photo) {
        this.photo = photo;
    }        
        
}
Abaixo as duas formas que conseguir salvar no banco
public void savePhoto() throws IOException {
        File file = new File("C:\\Users\\WILLIANBALDEZ.AP\\Pictures\\foto.jpg");
        FileInputStream fis = new FileInputStream(file);
        byte[] bytes = new byte[(int) file.length()];
        fis.read(bytes);
        photo.setPhoto(bytes);
        save(photo);
    }

public void savePhoto() throws IOException {
        imagemB = ImageIO.read(new File("C:/Users/WILLIANBALDEZ.AP/Pictures/FOTO.jpg"));
        ByteArrayOutputStream bytesImg = new ByteArrayOutputStream();
        ImageIO.write((BufferedImage) imagemB, "jpg", bytesImg);//seta a imagem para bytesImg  
        bytesImg.flush();//limpa a variável  
        byte[] byteArray = bytesImg.toByteArray();//Converte ByteArrayOutputStream para byte[]   
        bytesImg.close();//fecha a conversão  
        photo.setPhoto(byteArray);
        save(photo);
    }

Agora a duvida é como exibir as imagens na Página WEB.

Desde já agradeço.

8 Respostas

fabim

Bem sei que provavelmente vc tem um prazo maluco e quer fazer isso pra ontem.
Mas se quer um conselho mude enqto vc esta aprendendo, e aprenda a salvar imagens em diretório, fora do banco, e ter no banco apenas as informacoes dessa imagem.

Aqui mesmo no GUJ tem muitos topicos sobre isso, da uma pesquisada.
E vai economizar uns problemas de performance durante sua carreira.

S

Se estiveres usando o PrimeFaces dá uma olhada em:

http://benignosales.wordpress.com/2010/11/05/jsf-2-0-primefaces-crud-com-foto-utilizando-pfileupload/

Boa sorte!

Abs.

W

poisé fabim, mas tenho que fazer pra salvar no banco mesmo, mas vlw a dica

SalomaoNeto, estou usando primefaces mesmo, e ja tinha visto esse exemplo mas não consegui fazer com que a imagem apareça na página, podes me ajudar?

desde jah agradeço.

F

Já tentou usar o componente p:graphicImage ?

W

Já sim… até tirei o primefaces, pra ver se era alguma problema do mesmo, mas não rolou, abaixo vou colocar o código:

<h:panelGrid columns="1" border="2" style="width: 300px;height: 400px">
            <h:graphicImage value="#{photoMB.imagem}" id="imagem5"/>              
        </h:panelGrid>

a imagem vem daqui:

public String exibirFoto() throws SQLException, IOException {
        Integer id = Integer.parseInt("12");
        photo = (Photo) session.load(Photo.class, id);
        //photo.setId(id);
        //photo.setPhoto(photo.getPhoto());
        this.imagem = new DefaultStreamedContent(new ByteArrayInputStream(photo.getPhoto()));
        return "Exibirphoto";
    }
F

Fiz algo parecido, quando ele upava uma imagem, ele já mostrava.

Hebert_Coelho

fabim:
Bem sei que provavelmente vc tem um prazo maluco e quer fazer isso pra ontem.
Mas se quer um conselho mude enqto vc esta aprendendo, e aprenda a salvar imagens em diretório, fora do banco, e ter no banco apenas as informacoes dessa imagem.

Aqui mesmo no GUJ tem muitos topicos sobre isso, da uma pesquisada.
E vai economizar uns problemas de performance durante sua carreira.


Concordo com tudo que ele falou viu.

Salva em um diretório viu.

mhjmhj2002

Eu uma vez precisei de fazer isso, na época trabalhava com flex de front-end e javaEE de back-end. Me lembro que a imagem não aparecia de jeito nenhum, uma hora se me ocorreu revisar o arquivo de bits que o java estava gerando e descobri que ele botava no header da imagem uma assinatura do java. ae quando tinha que fazer o caminho de volta para exibir ela não aparecia. Me lembro que consegui resolver isso com um programinha que me mostrava os bits em diferentes formatos incluindo o formato da imagem (não lembro o nome dele), fiz um teste e tirei esse cabeçalho que o java adiciona e a imagem apareceu na hora.
espero ter ajudado de alguma forma…

Criado 21 de dezembro de 2011
Ultima resposta 21 de dez. de 2011
Respostas 8
Participantes 6