Vaadin 中的 MultiFileUpload - 我想在上传最后一个文件时执行一些任务
MultiFileUpload in Vaadin - I want to do some task when the last file is uploaded
我想一次做两个任务
- 正在上传多个文件。
- 当所有选定的文件都上传后,我想打开一个 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
}
});
此侦听器将在以下时间每次被调用:
- 上传完成;
- 没有其他正在进行的上传。
我想一次做两个任务
- 正在上传多个文件。
- 当所有选定的文件都上传后,我想打开一个 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
}
});
此侦听器将在以下时间每次被调用:
- 上传完成;
- 没有其他正在进行的上传。