My bean class is already able to save the image in my specific directory, I know this because I did a test, but only it fails to save the String which is the name of the file that makes FileUpload in the database
I'm going to show part of the product entity
@Entity
@Table(name = "tbl_produtos")
@NamedQueries({
@NamedQuery(name = "Produto.listar", query = "SELECT p from Produto p"),
@NamedQuery(name = "Produto.Imagem", query = "INSERT INTO Produto (IMAGEM)" + "VALUES(?)"),
@NamedQuery(name = "Produto.buscarPorCodigo", query = "SELECT p from Produto p where p.codigo = :codigo") })
public class Produto {
private String imagem;
contains other attributes and also contains the getts and setts of the image attribute.
This is the bean class I am trying to write to the image string in the
package br.com.drogaria.bean;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.apache.commons.fileupload.FileUpload;
import org.primefaces.model.UploadedFile;
import br.com.drogaria.dao.ProdutoDAO;
import br.com.drogaria.domain.Produto;
@ManagedBean
@SessionScoped
public class FileuploadBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String destination = "C:\tmp\";
private UploadedFile file;
Produto produto;
ProdutoDAO produtoDAO = new ProdutoDAO();
public FileuploadBean() {
}
public void TransferFile(String fileName, InputStream in) {
try {
OutputStream out = new FileOutputStream(new File(destination
+ fileName));
int reader = 0;
byte[] bytes = new byte[(int) getFile().getSize()];
while ((reader = in.read(bytes)) != -1) {
out.write(bytes, 0, reader);
}
in.close();
out.flush();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
public void upload() {
String extValidate;
if (getFile() != null) {
String ext = getFile().getFileName();
if (ext != null) {
extValidate = ext.substring(ext.indexOf(".") + 1);
} else {
extValidate = "null";
}
if (extValidate.equals("jpg") || extValidate.equals("png")) {
try {
TransferFile(getFile().getFileName(), getFile()
.getInputstream());
} catch (IOException ex) {
Logger.getLogger(FileUpload.class.getName()).log(
Level.SEVERE, null, ex);
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(
"Perigo, erro ao fazer Upload do arquivo"));
}
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Sucesso", getFile()
.getFileName()
+ "seu upload. conteudo"
+ getFile().getContentType()
+ "tamanho"
+ getFile().getSize()));
} else {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Perigo",
"o arquivo tem que ser pdf"));
}
} else {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(
"Perigo, selecione o arquivo"));
}
String nomeAquivo = "";
nomeAquivo = getFile().getFileName();
System.out.println(destination + "nome do arquivo" + " " + nomeAquivo);
produto.setImagem(nomeAquivo);
produtoDAO.gravarImagem(produto);
}
public String getDestination() {
return destination;
}
public void setDestination(String destination) {
this.destination = destination;
}
public UploadedFile getFile() {
return file;
}
public void setFile(UploadedFile file) {
this.file = file;
}
}
This is the piece of code I'm having trouble with
String nomeAquivo = "";
nomeAquivo = getFile().getFileName();
System.out.println(destination + "nome do arquivo" + " " + nomeAquivo);
produto.setImagem(nomeAquivo);
produtoDAO.gravarImagem(produto);
I am trying to change this method to save the name of the image in the bank, being that I am not able to
public Produto gravarImagem(Produto produto) {
Session sessao = HibernateUtil.getSessionFactory().openSession();
Produto produtos = null;
try {
Query inseri_imagem = sessao.getNamedQuery("Produto.Imagem");
inseri_imagem.setString(null, produto);
produtos = (Produto) inseri_imagem.uniqueResult();
} catch (RuntimeException ex) {
throw ex;
} finally {
sessao.close();
}
return produtos;
}
I'm using a JSF project with Hibernate in a DAO model.