File Upload Progress Bar

Is there a way to show the progress of the file upload from temporaryStorage to fileStorage. I dealy an event listener that can update the UI with the progress of the upload

Sure:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<window xmlns="http://jmix.io/schema/ui/window"
        caption="msg://sampleScreen.caption">
    <layout>
        <fileStorageUpload id="uploadField"
                           fileStoragePutMode="MANUAL"
                           showFileName="true"
                           showClearButton="true"/>
    </layout>
</window>
package com.company.demo.screen.sample;

import io.jmix.core.FileRef;
import io.jmix.ui.Dialogs;
import io.jmix.ui.component.FileStorageUploadField;
import io.jmix.ui.component.SingleFileUploadField;
import io.jmix.ui.executor.BackgroundTask;
import io.jmix.ui.executor.TaskLifeCycle;
import io.jmix.ui.screen.Screen;
import io.jmix.ui.screen.Subscribe;
import io.jmix.ui.screen.UiController;
import io.jmix.ui.screen.UiDescriptor;
import io.jmix.ui.upload.TemporaryStorage;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.UUID;
import java.util.concurrent.TimeUnit;

@UiController("SampleScreen")
@UiDescriptor("sample-screen.xml")
public class SampleScreen extends Screen {

    @Autowired
    private FileStorageUploadField uploadField;
    @Autowired
    private TemporaryStorage temporaryStorage;
    @Autowired
    private Dialogs dialogs;

    @Subscribe("uploadField")
    public void onUploadFieldFileUploadSucceed(SingleFileUploadField.FileUploadSucceedEvent event) {
        BackgroundTask<Integer, FileRef> task = new TransferFileTask(uploadField.getFileId(), event.getFileName());
        dialogs.createBackgroundWorkDialog(this, task)
                .withCaption("Please wait")
                .withMessage("Moving file to file storage...")
                .show();
    }

    private class TransferFileTask extends BackgroundTask<Integer, FileRef> {

        private String fileName;
        private UUID tempFileId;

        public TransferFileTask(UUID tempFileId, String fileName) {
            super(3, TimeUnit.MINUTES, SampleScreen.this);
            this.tempFileId = tempFileId;
            this.fileName = fileName;
        }

        @Override
        public FileRef run(TaskLifeCycle<Integer> taskLifeCycle) throws Exception {
            FileRef fileRef = temporaryStorage.putFileIntoStorage(tempFileId, fileName);
            // delay for demo
            Thread.sleep(5000);
            return fileRef;
        }

        @Override
        public void done(FileRef result) {
            uploadField.setValue(result);
        }
    }
}