文件保存至数据库
本章节中,我们提供一个上传和保存图片至应用程序数据库的示例。以及,介绍如何在 Jmix UI 视图中展示图片。
只在数据库保存小文件,例如,缩略图、图标等。因为在上传或下载时,整个文件都会加载到内存。 |
首先,为实体创建一个字节数组(byte[]
)类型的属性,示例:
@Column(name = "PHOTO")
private byte[] photo;
public byte[] getPhoto() {
return photo;
}
public void setPhoto(byte[] photo) {
this.photo = photo;
}
当运行应用程序时,Studio 会生成一个数据库迁移脚本,用于创建适合你数据库类型的相应列。例如,对于 PostgreSQL,类型为 bytea
。
如需从用户界面上传文件,请使用 fileUploadField 单文件上传 组件绑定实体属性。如果文件是图片,可以使用 image
组件在视图中展示图片。示例:
<formLayout id="form" dataContainer="personDc">
<textField id="nameField" property="name"/>
<vbox>
<hbox>
<fileUploadField id="photoField" property="photo"/> (1)
<button id="downloadBtn" text="Download"/>
</hbox>
<image id="image" dataContainer="personDc" property="photo"/> (2)
</vbox>
</formLayout>
1 | fileUploadField 组件支持用户上传文件并保存至实体属性。 |
2 | image 组件展示实体属性的内容。 |
如需下载文件,添加一个按钮,按下面的方法定义点击事件处理器:
@ViewComponent
private InstanceContainer<Person> personDc;
@Autowired
private Downloader downloader; (1)
@Subscribe("downloadBtn")
public void onDownloadBtnClick(final ClickEvent<Button> event) {
byte[] photo = personDc.getItem().getPhoto();
downloader.download(
photo,
personDc.getItem().getName() + "photo", (2)
DownloadFormat.JPG (3)
);
}
1 | 用 Downloader bean 下载文件。 |
2 | 定义下载后的文件名。 |
3 | 如果知道文件格式,可以在 download() 方法的最后一个参数指定。根据格式的不同,浏览器会下载文件或者在标签页展示。 |
本页是否有帮助?
感谢您的反馈