Boa Tarde Galera,
To com um problema e preciso da ajuda de vocês.
Preciso gravar uma imagem no banco dados e recupera-lá para exibição.
Consigo gravar tranquilamente, no java uso uma variavel byte[] e passo ela para um atributo blob no mysql, até ai tranquilo, funcionando corretamente.
Na hora de recuperar, tenho um problema, pois pego ela como byte e preciso jogar em um StreamedContent para exibir com um graphicImage do primefaces 2.2.1
Abaixo o metodo DAO:
public List<ImagemBean> getImagem() {
String sql = "select * from tbl_imagem";
List<ImagemBean> lista = new ArrayList<ImagemBean>();
ImagemBean imagem = new ImagemBean();
try {
PreparedStatement preparedStatement = (PreparedStatement) FabricaConexao.getPreparedStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
imagem.setId(resultSet.getInt("id"));
imagem.setAlt(resultSet.getString("alt"));
imagem.setImagem(resultSet.getBytes("imagem"));
imagem.setImagemStreamed(new DefaultStreamedContent(new ByteArrayInputStream(imagem.getImagem())));
System.out.println("ImagemStreamed: "+imagem.getImagemStreamed().getName());
lista.add(imagem);
}
} catch (SQLException ex) {
Logger.getLogger(MostraImagemDAO.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(MostraImagemDAO.class.getName()).log(Level.SEVERE, null, ex);
}
return lista;
}
Basicamente faço o seguinte:
Crio uma lista e um objeto ImagemBean, nesse imagemBean tenho um campo imagemStreamed do tipo StreamedContent e um campo imagem do tipo byte.
Basicamente recupero a imagem ainda em byte e jogo para o campo imagem e ai tento converter de byte e jogar para o campo imagemStreamedContent.
E para exibir:
<p:graphicImage value="#{lista.imagemStreamed}" alt="Teste" cache="false"/>
Isso dentro de um DataTable.
Alguem consegue localziar algum erro?
Uso Netbeans 7
Tomcat 7
Primefaces 2.2.1
Agradeço muito a ajuda.