Gravar arquivos no banco de dados com PrimeFaces

4 respostas
hernandes_sp

Amigos:

Estou entusiasmado com o poder do PrimeFaces aliado a tecnologia JSF.

Já fiz um exemplo semelhante em Flex com PHP para gravar arquivos no banco diferenciando-os pelo mimeType.

Sei que tem muita gente que vai aconselhar salvar em uma pasta no servidor.

Mas… gostaria de um exemplo simples, ou um tutorial que me ajude a fazer isso.

Sei que o caminho é pelo fileUploader. Mas já tentei criar no meu Bean um tipo Bytes e receber esse arquivo. Mas sem sucesso.

Alguém poderia me dar uma força??

Desde já agradeço

4 Respostas

F

Já fiz isso com um Objeto “Imagem” (no meu caso era uma), que tinha as propriedades: nome do arquivo (String), conteudo(byte[]), mimeType (String). No listener do FileUpload do Primefaces, vem o evento de UploadEvent (ou algo do tipo). A partir desse evento, vc pega o content (byte[]) e seta na sua variável. També pega o nome e o tipo. Assim, você tem um objeto “Arquivo”. Esse objeto arquivo pode ser uma entidade do seu banco de dados, onde o conteudo dele (byte[]) é do tipo BLOB. Em JPA, você apenas anota essa classe com @Entity e o conteudo com @Lob.

jaissonduarte

se estiver usando o Postgres
http://pgdocptbr.sourceforge.net/pg80/lo-funcs.html

hernandes_sp

Caros:

Consegui fazer um exemplo mas teoricamente parece estar correto!!! Mas na prática posso estar esquecendo algo.

Dêem uma olhada:

NO XHTML:

Nome: <p:inputText id=produtoNome value="#{produtosBean.nome}"/>


Arquivo: <p:fileUpload value="#{produtosBean.foto}" mode=simple/>

<p:commandButton value=Cadastrar title=Cadastrar action="#{produtosBean.inserir}"/>

NO BEAN

public UploadedFile foto;

public UploadedFile getFoto() {

return foto;

}
/**
 * @param foto the foto to set
 */
public void setFoto(UploadedFile foto) {
    this.foto = foto;
}
public String inserir()

{

try{

con = DriverManager.getConnection(dbUrl, userName, password);

String sqlStmt = INSERT INTO produtos (nome,foto) VALUES(?,?);

PreparedStatement stmt =con.prepareStatement(sqlStmt);	

stmt.setString(1,nome);

stmt.setBlob(2,foto.getInputstream());

stmt.execute();

} catch(Exception e)

{

System.err.println (Erro durante inserção de dados!);	

}

return ok.xhtml;

}

Estou pegando do FileUpload o envio do arquivo e depois, como meu campo foto é BLOB, estou passando o InputStream.

Alguém poderia me ajudar???

hernandes_sp

Nenhuma dica mais???

Já vi que aqui o pessoal prefere salvar arquivo em uma pasta.

??

Criado 3 de abril de 2012
Ultima resposta 3 de abr. de 2012
Respostas 4
Participantes 3