Imagem no mysql com java e primefaces

4 respostas
P
Boa noite a todos.  Preciso persistir uma imagem no banco de dados mysql, estou usando java web, primefaces, mysql e maven no projeto. Tentei de todas as formas, usando a documentação do componente do primefaces: p:fileUpload, coloquei as dependencias, os filtros no web.xml, tudo, ele ate chega ate o ManagedBean, mas na hora de gravar no banco nao vai, de forma alguma, vou postar as partes mais importantes do código:

Na classe de modelo: Adolescente.java, tenho as variáveis mapeadas para o banco, a variável correspondente à foto é:

<a class="mention" href="/u/lob">@Lob</a>

@Column(name=ado_foto)

private byte[] foto; (Os get e set estão presentes normalmente na classe)

No managedBean eu tenho o componente fileUpload do primefaces chamando o metodo para fazer o upload da imagem:
<p:fileUpload id=“foto” style=“width:100%” mode=“advanced” fileUploadListener="#{adolescenteBean.upload}" update=“messages” auto=“true”/>

E aqui o metodo que faz a atribuição do arquivo da foto na variavel para compor o objeto e gravar no banco:

public void upload(FileUploadEvent evento) {

(esse file é uma variavel do tipo  UploadedFile, foi so um teste)

this.file =   evento.getFile();

System.out.println("Nome do arquivo: " + file.getFileName());

this.adolescente.setFoto(file.getContents()); //array de bytes
}

até aqui, onde o arquivo é recebido pelo metodo vai tranquilo, agora fazer a variavel receber
esse aquivo pelo parametro e “setar” no objeto é que ta pegando…tipo a variavel this.adolescente.setFoto(), eu ja coloquei todas as opções desse parametro e nada faz ele gravar no banco de dados.
Se alguém puder me dar uma luz mais uma vez eu agradeço.

att

PAULO

4 Respostas

darlan_machado

Acredito que você não tenha tentado todas as formas possíveis. Em todo caso, o “não vai” significa o que? Exceção?

Quando postar trechos de código, favor usar o recurso de formatação.
Selecione o mesmo e clique no botão </> acima do editor.

P

Desculpe por nao colocar o código de maneira correta. Bom, dizer que “não vai” quer dizer que não grava no banco, o arquivo, o dado, a informação, não vai pro banco, entendeu? Para melhorar o entendimento e acredito que para me ajudar nesse problema, vamos deixar de lado o código em si, nos atentemos ao ponto que estou com dificuldade. Eu tenho um bean gerenciado que instancia um objeto que é uma entidade que por sua vez representa uma tabela no banco. Nessa classe tenho uma propriedade do tipo byte[] que será a foto do individuo.
@Lob @Column(name="ado_foto") private byte[] foto;
Ela está mapeada assim na classe. É nesta propriedade, atraves do metodo set, que eu preciso que o arquivo da foto chegue, justamente pra compor o objeto e assim o restante dos componetes possam fazer seu trabalho de gravar no banco. Entao até no metodo do bean gerenciado o arquivo está chegando:
public void upload(FileUploadEvent evento) {
try {

UploadedFile arquivoUpload = evento.getFile();  <<--Até aqui tudo bem, se eu escrever: arquivoUpload.getFileName(); ele vai retornar o nome do arquivo que está nesta variavel do tipo UploadedFile. Daqui pra frente como você faria para gravar no banco, ou melhor, pra atribuir esse arquivo a minha propriedade, do tipo byte[], para que eu possa compor o objeto dessa maneira: this.<ojbeto instanciado>.setFoto(<aqui vai a variavel>);

Como eu disse eu ja fiz de diversas maneiras, pelo menos as documentadas, e continua gravando null no banco. Voce pode ma ajudar por favor.

darlan_machado

E se o problema for, justamente, o código?

P

Fazemos igual Jack o estripador: vamos por partes. Até o Bean tá chegando, a partir daí, para carregar a variável usando o método set correspondente, como proceder?

Criado 5 de dezembro de 2019
Ultima resposta 6 de dez. de 2019
Respostas 4
Participantes 2