2016-04-28 11 views
1

私のアプリにはアップロードボタンがあります。 ユーザーがファイルを選択すると、そのファイルの拡張子を検証する必要があります。 (ユーザーに.txtファイルのみをアップロードさせる)。そしてそれがtxtならば、それをサーバーに保存します。それ以外の場合は、そのようなファイルで何もしないでください。Vaadin 6アップロードコンポーネント:サーバー上の間違ったファイルを保存せずにファイルアップロードのプロセスを終了する方法

私はそのような何か試してみた:事実を除いて、アップロードコンポーネントがエラーをキャッチし、それに近い作品

//Check file type on start event: 
@Override 
public void uploadStarted(StartedEvent event) { 
    String contentType = event.getFilename(); 
    if (!contentType.endsWith("txt")) { 
     isValid = false; 
     upload.interruptUpload(); 
    } 
} 

//If it is txt, do some actions: 
@Override 
public OutputStream receiveUpload(String filename, String mimeType) { 
    FileOutputStream fos = null; 
    if(isValid) { 
     try { 
      createUserDir(filename); 
      fos = new FileOutputStream(file); 
      //some more actions 
     } catch (final java.io.FileNotFoundException e) { 
      log.error(e); 
      return null; 
     } 
    } 
    return fos; 
} 

//Error msg for a user 
@Override 
public void uploadFailed(Upload.FailedEvent event) { 
    root.getWindow().showNotification("Error Header", "Error Msg", 
      Window.Notification.TYPE_ERROR_MESSAGE); 
} 

を:

com.vaadin.terminal.gwt.server.UploadException: Upload failed at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.streamToReceiver(AbstractCommunicationManager.java:623) at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleSimpleMultipartFileUpload(AbstractCommunicationManager.java:476) at com.vaadin.terminal.gwt.server.CommunicationManager.handleFileUpload(CommunicationManager.java:259) at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:495) at javax.servlet.http.HttpServlet.service(HttpServlet.java:723) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:563) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:620) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Unknown Source) Caused by: com.vaadin.terminal.gwt.server.NoOutputStreamException at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.streamToReceiver(AbstractCommunicationManager.java:568) ... 17 more

だから、正しい方法は何ですか間違ったファイルでアップロードを終了しますか?代わりにヌルの

答えて

1

戻りNullOutputStream(これextends OutputStream):あなたが持っている必要がありますので、

//Check file type on start event: 
@Override 
public void uploadStarted(StartedEvent event) { 
    String contentType = event.getFilename(); 
    if (!contentType.endsWith("txt")) { 
     isValid = false; 
     upload.interruptUpload();  
    } 
} 

//If it is txt, do some actions: 
@Override 
public OutputStream receiveUpload(String filename, String mimeType) { 
    FileOutputStream fos = null; // Stream to write to 
    if (filename != null && !filename.isEmpty() && isValid) { 
     try { 
      createUserDir(filename); 
      fos = new FileOutputStream(file); 
      return fos; 
     } catch (final java.io.FileNotFoundException e) { 
      log.error(e); 
      return new NullOutputStream(); 
     } 
    } else {/*Show error "Please select a file to upload."*/}; 

    uploadControl.interruptUpload(); 
    return new NullOutputStream(); 
} 

NullOutputStreamクラスは、 "パッケージcom.vaadin.external.org.apache.commons.io.output" を経由してパッケージ化されていますあなたに利用可能なクラス。

質問がある場合はお知らせください。

関連する問題