在GWT中,如何构建一个允许用户将其图像上传到Webserver中的文件夹的系统



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 " ) ;  }  
但是我们如何在GwtGWTP中做到这一点呢?Gwt是否包含任何支持此功能的类?

我会使用gwupload,因为它很简单。

在客户端使用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 servlet。

编辑:注意该方法接收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;
    }
  }

如果您的servlet已经处理多部分请求,您可以使用GWT中的标准方式使用FileUploadFormPanel,尽管您将错过进度条,文件选择器样式等。

  // 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();
    }
  });

最新更新