下载和展示文件

本章节介绍如何下载文件至用户电脑或通过 UI 展示文件。如需通过 REST API 下载,请参阅 文件 API 章节。

使用 Downloader

Downloader bean 支持下载文件至用户电脑。带有一组 download() 方法,可以接收不同方式定义的文件内容参数。

根据文件类型和 jmix.ui.view-file-extensions 属性的设置,文件可以直接下载或者通过浏览器的新标签页展示。文件类型通过 DownloadFormat 参数确定,如果未提供该参数,则通过文件扩展名确定。如需不考虑文件类型强制在浏览器展示,可以调用 DownloadersetShowNewWindow(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> 元素。

请参阅组件的文档了解详细用法和示例。