2013-04-26 18 views
0

Java Desktop应用中,我们可以允许用户将文件上传到一个文件夹中的Web服务器,这样的事情,如何构建一个允许用户将他们的图像上传到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 ") ; } 

但是,我们如何做到这一点的GWTGWTPGwt是否包含支持此类的任何类?

+0

请参阅这个答案http://stackoverflow.com/questions/8441599/gwt-browse-files-directories/8442764#8442764 – Spiff 2013-04-26 06:28:28

回答

1

我会使用gwtupload,因为它的简单。

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:

在客户端,如果你想上传多个文件使用Multiuploader。

编辑:请注意,该方法收到的列表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的标准方式uisng 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(); 
    } 
    }); 
+0

我必须经过这么多的设置步骤和这么多的配置,这使得它更复杂。你知道如何处理: final FileUpload fileUpload = new FileUpload(); – Tom 2013-04-26 07:38:06

+0

是的,更新了我的回复。 – 2013-04-26 07:58:23

+0

我得到错误: 无法解析类型org.apache.commons.fileupload.FileItem。它是从所需的.class文件间接引用的 我是否错过导入任何软件包? – Tom 2013-04-26 08:36:47

相关问题