Salvar e Exibir Imagem - Banco de Dados

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

[code]
@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;
}        

}[/code]

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.

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.

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.

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.

Já tentou usar o componente p:graphicImage ?

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";
    }

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

[quote=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.[/quote]
Concordo com tudo que ele falou viu.

Salva em um diretório viu.

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…