限制文件类型上载组件

我正在使用vaadin(7.1.9)的上传组件,现在我的麻烦是我无法限制哪些文件可以与上传组件一起发送到服务器,但我还没有找到任何用于此目的的API。 唯一的方法是在上传后丢弃错误类型的文件。

public OutputStream receiveUpload(String filename, String mimeType) { if(!checkIfAValidType(filename)){ upload.interruptUpload(); } return out; } 

这是正确的方法吗?

不,这不是正确的方法。 事实上,Vaadin确实提供了许多有用的界面,您可以使用它们来监控上传开始,中断,完成或失败的时间。 这是一个清单:

 com.vaadin.ui.Upload.FailedListener; com.vaadin.ui.Upload.FinishedListener; com.vaadin.ui.Upload.ProgressListener; com.vaadin.ui.Upload.Receiver; com.vaadin.ui.Upload.StartedListener; 

这是一个代码片段,为您举个例子:

 @Override public void uploadStarted(StartedEvent event) { // TODO Auto-generated method stub System.out.println("***Upload: uploadStarted()"); String contentType = event.getMIMEType(); boolean allowed = false; for(int i=0;i 

这里, allowedMimeTypes是一个mime类型字符串数组。

 ArrayList allowedMimeTypes = new ArrayList(); allowedMimeTypes.add("image/jpeg"); allowedMimeTypes.add("image/png"); 

我希望它对你有所帮助。

可以做到。

您可以添加它,它将起作用(全部由HTML 5完成,大多数浏览器现在支持accept属性) – 这是.csv文件的示例:

 upload.setButtonCaption("Import"); JavaScript.getCurrent().execute("document.getElementsByClassName('gwt-FileUpload')[0].setAttribute('accept', '.csv')"); 

我认为最好从Receiver's receiveUpload抛出自定义exception:

 Upload upload = new Upload(null, new Upload.Receiver() { @Override public OutputStream receiveUpload(String filename, String mimeType) { boolean typeSupported = /* do your check*/; if (!typeSupported) { throw new UnsupportedImageTypeException(); } // continue returning correct stream } }); 

例外只是一个简单的自定义exception:

 public class UnsupportedImageTypeException extends RuntimeException { } 

然后,只需在上传失败时添加一个监听器,并检查原因是否是您的exception:

 upload.addFailedListener(new Upload.FailedListener() { @Override public void uploadFailed(Upload.FailedEvent event) { if (event.getReason() instanceof UnsupportedImageTypeException) { // do your stuff but probably don't log it as an error since it's not 'real' error // better would be to show sth like a notification to inform your user } else { LOGGER.error("Upload failed, source={}, component={}", event.getSource(), event.getComponent()); } } }); 

public static boolean checkFileType(String mimeTypeToCheck){ArrayList allowedMimeTypes = new ArrayList();

  allowedMimeTypes.add("image/jpeg"); allowedMimeTypes.add("application/pdf"); allowedMimeTypes.add("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); allowedMimeTypes.add("image/png"); allowedMimeTypes.add("application/vnd.openxmlformats-officedocument.presentationml.presentation"); allowedMimeTypes.add("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); for (int i = 0; i < allowedMimeTypes.size(); i++) { String temp = allowedMimeTypes.get(i); if (temp.equalsIgnoreCase(mimeTypeToCheck)) { return true; } } return false; }