0

Java Desktopアプリケーションでは、ユーザーがファイルを WebServer のフォルダーにアップロードできるようにすることができます。

 File rootDir = new File( "/home/bala/temp" ) ;  
      if( FileUpload.isMultipartContent( request ) ) {  
          DiskFileUpload fileUpload = new DiskFileUpload() ;  
          Iterator iterator = fileUpload.parseRequest( request ).iterator() ;  
          while( iterator.hasNext() ) {  
                 FileItem fileItem = ( FileItem ) iterator.next() ;  
                 File file = new File( rootDir , fileItem.getName() ) ;  
                 fileItem.write( file ) ; }  
          } 
     else { throw new Exception( "Invalid request " ) ;  }  

しかし、GwtまたはGWTPでこれを行うにはどうすればよいでしょうか。Gwtにはこれをサポートするクラスが含まれていますか?

4

1 に答える 1

1

その単純さから、gwtuploadを使用します。

複数のファイルをアップロードする場合は、クライアント側で Multiuploader を使用します。

  public void onModuleLoad() {
    MultiUploader uploader = new MultiUploader();

    RootPanel.get().add(uploader);

    uploader.addOnFinishUploadHandler(new IUploader.OnFinishUploaderHandler() {
      public void onFinish(IUploader uploader) {
        if (uploader.getStatus() == Status.SUCCESS) {
          UploadedInfo info = uploader.getServerInfo();
          System.out.println("File name " + info.name);
          System.out.println("File content-type " + info.ctype);
          System.out.println("File size " + info.size);
        }
      }
    });
  }

UploadActionサーバー側では、ライブラリで提供されているサーブレットをオーバーライドするだけです。

編集: メソッドは のリストを受け取ることに注意してくださいFileItem。各 FileItem は、アップロードされたファイルの一時的な情報とコンテンツですが、実際の Java ではありませんFile。ここにビジネス コードを配置して、独自のdirs構造を作成したり、それらを処理したり、さらには ddbb に BLOB フィールドとして保存したりします。この場合、すべてのファイルを取得して一時フォルダーに保存します (このフォルダーは、Linux、Windows などでは異なることに注意してください)。

  public class SampleUploadServlet extends UploadAction {
    @Override
    public String executeAction(HttpServletRequest request, List<FileItem> sessionFiles) throws UploadActionException {
      String response = "";
      for (FileItem item : sessionFiles) {
        if ( ! item.isFormField()) {
          try {
            File file = File.createTempFile("upload-", ".bin");
            item.write(file);

            /// Send a customized message to the client.
            response +=  file.getAbsolutePath() + "\n";
          } catch (Exception e) {
            throw new UploadActionException(e);
          }
        }
      }

      /// Remove files from session because we have a copy of them
      removeSessionFileItems(request);

      /// Send your customized message to the client.
      return response;
    }
  }

サーブレットがすでにマルチパート リクエストを処理している場合、プログレス バーやファイル チューザ スタイルなどを見逃すことはありますが、GWT uisngFileUploadおよびで標準的な方法を使用できます。FormPanel

  // Add a form-panel to your document
  final FormPanel form = new FormPanel();
  form.setEncoding(FormPanel.ENCODING_MULTIPART);
  form.setMethod(FormPanel.METHOD_POST);
  form.setAction("your_upload_servlet_url");
  RootPanel.get().add(form);

  // Add a file-upload to your form
  FileUpload fu =  new FileUpload();
  form.add(fu);

  // submit your form when the user selects a file
  fu.addChangeHandler(new ChangeHandler() {
    public void onChange(ChangeEvent event) {
      form.submit();
    }
  });
于 2013-04-26T06:38:09.620 に答える