Vaadin 中的 MultiFileUpload - 我想在上传最后一个文件时执行一些任务

MultiFileUpload in Vaadin - I want to do some task when the last file is uploaded

我想一次做两个任务

  1. 正在上传多个文件。
  2. 当所有选定的文件都上传后,我想打开一个 window 并选择它们的类型和一些其他工作,然后保存它。

当我为单次上传执行此操作时,效果很好。

现在我正在尝试使用 MultiFileUpload addon 实现多重上传,但是事件 public void handleFile(InputStream in, String filename, String mimetype, long length) 对每个文件都被一个接一个地触发。我想在上传最后一个文件时打开 window。如何检测最后一个文件已上传?

这是我的代码:

protected void init(VaadinRequest vaadinRequest) {
    FormLayout layout = new FormLayout();
    UploadFinishedHandler uploadFinishedHandler = new UploadFinishedHandler() {
        @Override
        public void handleFile(InputStream in, String filename, String mimetype, long length) {
            try {
                FileOutputStream fos = null;
                String filePath = "/home/yassir/Desktop/";
                File dirFile = new File(filePath);
                if (!dirFile.exists()) {
                        dirFile.mkdirs();
                }
                filePath += filename;

                Button btn = new Button(filename);
                layout.addComponent(btn);
                File file = new File(filePath);
                fos = new FileOutputStream(file);
                byte[] buffer = new byte[in.available()];
                in.read(buffer);
                fos.write(buffer);
                fos.close();
            } catch (FileNotFoundException ex) {
                Logger.getLogger(MyUI.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(MyUI.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    };

    UploadStateWindow uploadStateWindow = new UploadStateWindow();
    MultiFileUpload multiFileUpload = new MultiFileUpload(uploadFinishedHandler, uploadStateWindow);
    layout.addComponent(multiFileUpload);
    setContent(layout);
}

我将调用函数 createWindowType()(我没有在此处添加)。

您可以使用 AllUploadFinishedHandler 处理最后一个文件上传。

像这样的东西应该可以工作:

multiFileUpload.setAllUploadFinishedHandler(new AllUploadFinishedHandler() {
    @Override
    public void finished() {
        //open window here
    }
});

此侦听器将在以下时间每次被调用:

  • 上传完成;
  • 没有其他正在进行的上传。