1
我試着在文件上傳前比較這些文件。Vaadin上傳組件如何在submitUpload之前獲取fileName?
如果系統中存在名稱存在的文件,請詢問有關創建新版本或僅覆蓋它的信息。
這裏是問題,如何獲取文件名?
我不能使用receiveUpload(),因爲在這個方法文件被從上傳組件中刪除?
我試着在文件上傳前比較這些文件。Vaadin上傳組件如何在submitUpload之前獲取fileName?
如果系統中存在名稱存在的文件,請詢問有關創建新版本或僅覆蓋它的信息。
這裏是問題,如何獲取文件名?
我不能使用receiveUpload(),因爲在這個方法文件被從上傳組件中刪除?
問題是,一旦您使用上傳組件啓動上載,只能通過調用interruptUpload()方法來中斷它,並且無法在以後重新開始。 中斷是永久性的。
這意味着您不能在上傳過程中暫停以查看系統中是否已有該文件。您必須一直上傳文件。
考慮到這個缺點,如果你有文件,你可以在上傳結束後檢查你的系統。如果你有這個文件,你可以顯示一個確認對話框,讓你選擇保留文件或覆蓋文件。
以下是我在「系統」檢查一個例子(我只保留文件名字符串列表),如果該文件已被上傳:
public class RestrictingUpload extends Upload implements Upload.SucceededListener, Upload.Receiver {
private List<String> uploadedFilenames;
private ByteArrayOutputStream latestUploadedOutputStream;
public RestrictingUpload() {
setCaption("Upload");
setButtonCaption("Upload file");
addSucceededListener(this);
setReceiver(this);
uploadedFilenames = new ArrayList<String>();
}
@Override
public OutputStream receiveUpload(String filename, String mimeType) {
latestUploadedOutputStream = new ByteArrayOutputStream();
return latestUploadedOutputStream;
}
@Override
public void uploadSucceeded(SucceededEvent event) {
if (fileExistsInSystem(event.getFilename())) {
confirmOverwrite(event.getFilename());
} else {
uploadedFilenames.add(event.getFilename());
}
}
private void confirmOverwrite(final String filename) {
ConfirmDialog confirmDialog = new ConfirmDialog();
String message = String.format("The file %s already exists in the system. Overwrite?", filename);
confirmDialog.show(getUI(), "Overwrite?", message, "Overwrite", "Cancel", new ConfirmDialog.Listener() {
@Override
public void onClose(ConfirmDialog dialog) {
if (dialog.isConfirmed()) {
copyFileToSystem(filename);
}
}
});
}
private void copyFileToSystem(String filename) {
try {
IOUtils.write(latestUploadedOutputStream.toByteArray(), new FileOutputStream(filename));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
}
}
private boolean fileExistsInSystem(String filename) {
return uploadedFilenames.contains(filename);
}
}
注我已用2個的外部庫:
你可以得到這個類來自Gist代碼片段:https://gist.github.com/gabrielruiu/9960772您可以粘貼到你的用戶界面,並對其進行測試。
嘗試查看此[限制文件類型](http://stackoverflow.com/questions/21913526/restricting-file-types-upload-component) – Skizzo