Компонент FileUploadField
позволяет пользователю загружать файлы на сервер. Компонент представляет собой кнопку, при нажатии на которую на экране отображается
стандартное для операционной системы окно, в котором можно выбрать один файл. Чтобы дать пользователю возможность загружать
сразу несколько файлов, используйте компонент FileMultiUploadField.
XML-имя компонента: upload
.
Компонент реализован для блоков Web Client и Desktop Client.
Рассмотрим пример использования компонента.
-
Объявляем компонент в XML-дескрипторе экрана:
<upload id="uploadField" caption="msg://upload"/>
-
В контроллере экрана инжектируем сам компонент, а также интерфейсы FileUploadingAPI и DataSupplier. Затем в методе
init()
добавляем компоненту слушатель, который будет реагировать на события успешной загрузки или ошибки:@Inject protected FileUploadField uploadField; @Inject protected FileUploadingAPI fileUploading; @Inject protected DataSupplier dataSupplier; @Override public void init(Map<String, Object> params) { uploadField.addListener(new FileUploadField.ListenerAdapter() { @Override public void uploadSucceeded(Event event) { FileDescriptor fd = uploadField.getFileDescriptor(); try { // save file to FileStorage fileUploading.putFileIntoStorage(uploadField.getFileId(), fd); } catch (FileStorageException e) { throw new RuntimeException(e); } // save file descriptor to database dataSupplier.commit(fd, null); showNotification("File uploaded: " + uploadField.getFileName(), NotificationType.HUMANIZED); } @Override public void uploadFailed(Event event) { showNotification("File upload error", NotificationType.HUMANIZED); } }); }
Метод
uploadSucceeded()
будет вызван компонентом после успешной загрузки файла во временное хранилище клиентского уровня. В этот момент у компонента можно получить объектFileDescriptor
, соответствующий загруженному файлу. Объектcom.haulmont.cuba.core.entity.FileDescriptor
(не путать сjava.io.FileDescriptor
) является персистентной сущностью, которая однозначно идентифицирует загруженный файл и впоследствии используется для выгрузки файла из системы.Метод
FileUploadingAPI.putFileIntoStorage()
используется для перемещения загружаемого файла из временного хранилища клиентского уровня в FileStorage. Параметрами этого метода являются идентификатор файла во временном хранилище и объектFileDescriptor
. Оба эти параметра предоставляетFileUploadField
.После загрузки файла в
FileStorage
выполняется сохранение экземпляраFileDescriptor
в базе данных посредством вызоваDataSupplier.commit()
. Возвращаемый этим методом сохраненный экземпляр может быть установлен в атрибут какой-либо сущности предметной области, связанной с данным файлом. В данном же случаеFileDescriptor
просто хранится в системе и дает доступ к файлу через экран > .Метод
uploadFailed()
вызывается компонентомFileUploadField
в случае ошибки загрузки файла во временное хранилище клиентского уровня. -
Максимальный размер загружаемого файла определяется свойством приложения cuba.client.maxUploadSizeMb и по умолчанию равен 20Мб. При выборе пользователем файла большего размера выдается соответствующее сообщение и загрузка прерывается.
Атрибуты upload
: