3.9.8.2. Выгрузка данных
Для выгрузки файлов на клиентском уровне следует использовать интерфейс ExportDisplay
, получив ссылку на него вызовом статического метода AppConfig.createExportDisplay()
, либо инжекцией в класс контроллера. Например:
AppConfig.createExportDisplay(this).show(fileDescriptor);
Метод show()
может принимать дополнительный параметр типа ExportFormat
, в котором можно задать тип содержимого и расширение имени файла. Если формат не передан, расширение берется из FileDescriptor
, а типом содержимого принимается application/octet-stream
.
От расширения имени файла зависит, будет ли файл выгружаться через диалог сохранения или открытия файлов браузера (Content-Disposition = attachment
), или браузер попытается отобразить содержимое прямо в своем окне (Content-Disposition = inline
). Список расширений файлов, отображаемых в окне браузера, задается свойством приложения cuba.web.viewFileExtensions.
ExportDisplay
можно также использовать для выгрузки произвольных данных, если в качестве параметра метода show()
передать экземпляр класса ByteArrayDataProvider
. Например:
public class SampleScreen extends AbstractWindow {
@Inject
private ExportDisplay exportDisplay;
public void onDownloadBtnClick(Component source) {
String html = "<html><head title='Test'></head><body><h1>Test</h1></body></html>";
byte[] bytes;
try {
bytes = html.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
exportDisplay.show(new ByteArrayDataProvider(bytes), "test.html", ExportFormat.HTML);
}
}