Выгрузка и отображение файлов
В этом разделе объясняется, как выгружать файлы на компьютер пользователя или отображать файлы в UI. Сведения о том, как получить файлы с сервера через REST API, см. в разделе Files API.
Использование Downloader
Бин Downloader
предназначен для выгрузки файлов на компьютер пользователя. Он имеет ряд методов download()
, которые принимают различные параметры, определяющие выгружаемый контент.
Файл может быть либо выгружен, либо показан браузером в новой вкладке. Это зависит от типа файла и значения свойства jmix.ui.view-file-extensions. Тип файла определяется параметром DownloadFormat
или, если он не указан, расширением имени файла. Вы также можете принудительно отображать содержимое вместо его выгрузки независимо от типа, вызвав метод setShowNewWindow(true)
бина Downloader
.
Выгрузка из файлового хранилища
Метод download()
со значением FileRef
позволяет выгрузить файл из файлового хранилища. Объект 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
для выгрузки содержимого этого потока. Например:
@Autowired
private Downloader downloader;
private void downloadInputStreamContent(InputStream inputStream) {
downloader.download(() -> inputStream, "archive.zip");
}
Отображение файлов на экранах UI
Jmix предоставляет два компонента UI для встраивания контента в экраны пользовательского интерфейса:
-
image
позволяет отображать изображения из различных ресурсов с помощью HTML-элемента<img>
. Этот компонент может быть декларативно привязан к атрибуту сущности для отображения изображений, хранящихся в виде массивов байтов в базе данных или в виде файлов в хранилище файлов. -
iframe
позволяет вставлять контент внутрь HTML-элемента<iframe>
.