下载和展示文件
本章节介绍如何下载文件至用户电脑或通过 UI 展示文件。如需通过 REST API 下载,请参阅 文件 API 章节。
使用 Downloader
Downloader
bean 支持下载文件至用户电脑。带有一组 download()
方法,可以接收不同方式定义的文件内容参数。
根据文件类型和 jmix.ui.view-file-extensions 属性的设置,文件可以直接下载或者通过浏览器的新标签页展示。文件类型通过 DownloadFormat
参数确定,如果未提供该参数,则通过文件扩展名确定。如需不考虑文件类型强制在浏览器展示,可以调用 Downloader
的 setShowNewWindow(true)
方法。
从文件存储下载
使用 FileRef
值的 download()
方法支持从文件存储下载文件。FileRef
对象包含文件的所有必要信息,因此可以直接传递给 Downloader
:
@Autowired
private Downloader downloader;
private void downloadFromFileStorage(Attachment attachment) {
FileRef fileRef = attachment.getFile();
downloader.download(fileRef);
}
下载任意资源
download()
方法也可以接收字节数组类型的参数,可以下载文件或任何其他内容。需要提供字节数组、目标文件名以及可选参数文件格式,示例:
@Autowired
private Downloader downloader;
private void downloadByteArray(byte[] content) {
downloader.download(content, "notes.txt", DownloadFormat.TEXT);
}
如需使用 DownloadFormat
中没有的格式,可以创建一个新的 DownloadFormat
,再提供给 download()
方法,示例:
@Autowired
private Downloader downloader;
private void downloadByteArrayInCustomFormat(byte[] content) {
DownloadFormat format = new DownloadFormat("application/data", "dat");
downloader.download(content, "some-file.dat", format);
}
download()
方法也可以接收一个返回 InputStream
的 lambda 表达式,将流作为文件下载。示例:
@Autowired
private Downloader downloader;
private void downloadInputStreamContent(InputStream inputStream) {
downloader.download(() -> inputStream, "archive.zip");
}
UI 界面展示文件
Jmix 提供两个 UI 组件用于将文件内容嵌入 UI 界面:
-
Image 图片 使用 HTML 的
<img>
元素展示来自不同资源的图片。该组件可以声明式地绑定至实体属性,展示以字节数组存在数据库或者以文件存在文件存储的图片。 -
BrowserFrame 浏览器框 支持将内容嵌入 HTML 的
<iframe>
元素。
请参阅组件的文档了解详细用法和示例。