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

时间:2017-03-01 08:00:28

标签: java vaadin multifile-uploader

我想一次完成两项任务

  1. 上传多个文件。
  2. 上传所有选定的文件后,我想打开一个窗口并选择其类型和其他一些工作,然后将其保存。
  3. 当我单次上传时,它可以正常工作。

    现在我尝试使用MultiFileUpload addon实现multiupload但是逐个为每个文件触发事件public void handleFile(InputStream in, String filename, String mimetype, long length)。我想在上传最后一个文件时打开窗口。如何检测上一个文件是否已上传?

    这是我的代码:

    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()(我没有在这里添加)。

1 个答案:

答案 0 :(得分:1)

您可以使用AllUploadFinishedHandler处理上次上传的文件。

这样的事情应该有效:

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

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

  • 上传完成;
  • 目前没有其他正在上传的内容。