Выгрузка и отображение файлов

В этом разделе объясняется, как выгружать файлы на компьютер пользователя или отображать файлы в 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>.