Vaadin上传图像并将其存储到数据库中

时间:2016-06-11 08:28:49

标签: mysql jpa upload blob vaadin

我正在使用Vaadin上传组件,到目前为止,我已设法将图像上传到目录,并在成功上传后将其显示在面板组件中。在此之后我想做的是将其插入数据库中。我所拥有的是一个名为Show的表,它有一个名称,日期和图像。在Show类中,我试图将我的图像作为字节数组或Blob。

Column(name="image")
private byte[] image;

@Lob
@Column(name="image")
private Blob image;

在上传成功方法中,我想将文件转换为字节数组,到目前为止我已尝试过:

File file = new File("C:\\Users\\Cristina_PC\\Desktop\\" + event.getFilename());
byte[] bFile = new byte[(int) file.length()];
try {
    FileInputStream fileInputStream = new FileInputStream(file);
    fileInputStream.read(bFile);
    uIP.uploadImage(bFile);
    fileInputStream.close();
} catch (Exception e) {
    e.printStackTrace();
}

我也尝试了这个:

byte[] data = Files.readAllBytes(new File("C:\\Users\\Cristina_PC\\Desktop\\" + event.getFilename()).toPath());
uIP.uploadImage(data);

uIP它实际上是我的uploadImagePresenter,我尝试将字节数组转换为Blob,或者只是将其作为字节数组传递给存储库

 public void uploadImage(byte[] data) throws SerialException, SQLException{
    //Blob blob = new javax.sql.rowset.serial.SerialBlob(data);
    showRepo.updateAfterImage(show, data);         // or (show, blob)
}

在我的存储库中,在我的updateAfterImage方法中,我有:

public void updateAfterImage(Show show, byte[] data)             //or Blob data
{
     em.getTransaction().begin();                       //em - EntityManager
     show.setImage(data);
     em.getTransaction().commit();
}

使用Blob或字节数组,我无法通过设置其图像并在数据库中更新它来更新现有的节目(单元格保持为NULL)。我也没有错误来帮助我弄清楚出了什么问题。任何帮助/建议都会有用。谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。它的工作原理是:

em.getTransaction().begin(); 
em.find(Show.class, show.getId()); 
show.setImage(data); 
em.merge(spectacol); 
em.getTransaction().commit();

在show repository中的updateAfterImage方法中。