gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 20:54:13 25 4
gpt4 key购买 nike

我正在使用 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)。我也没有得到任何错误来帮助我找出问题所在。任何帮助/建议都会有用。谢谢!

最佳答案

我已经找到解决办法了。让它发挥作用的原因是:

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

在显示存储库中的 updateAfterImage 方法中。

关于mysql - Vaadin 上传图像并将其存储到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37761630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com