2013-02-26 61 views
0

我想上傳一個文件在GWT中,我堅持了2天。如何使用gwtupload上傳文件

我現在想的一些教程,所以這裏是我的代碼

我下面的代碼從來就沒有到服務器端,任何想法..

,或者如果有人能給我提供一些工作代碼..

這是我的客戶端

public class UploadDb extends Composite{ 

     private FlowPanel panelImages = new FlowPanel(); 


     public UploadDb() { 
     initWidget(panelImages); 

     // Create a new multiuploader and attach it to the document 
     MultiUploader defaultUploader = new MultiUploader(FileInputType.LABEL); 
     panelImages.add(defaultUploader); 
     defaultUploader.setEnabled(true); 

     // Add a finish handler which will load the image once the upload finishes 
     defaultUploader.addOnFinishUploadHandler(onFinishUploaderHandler); 
     } 

     // Load the image in the document and in the case of success attach it to the viewer 
     private IUploader.OnFinishUploaderHandler onFinishUploaderHandler = new IUploader.OnFinishUploaderHandler() { 
     public void onFinish(IUploader uploader) { 
      if (uploader.getStatus() == Status.SUCCESS) { 

      new PreloadedImage(uploader.fileUrl(), showImage); 
     System.out.println("Server message " + uploader.fileUrl()); 
      } 
     } 
     }; 

     // Attach an image to the pictures viewer 
     private OnLoadPreloadedImageHandler showImage = new OnLoadPreloadedImageHandler() { 
     public void onLoad(PreloadedImage image) { 
      image.setWidth("75px"); 
      panelImages.add(image); 
     } 
     }; 


    } 

代碼在我的服務器端

   public class DashBoardUploadServlet extends UploadAction { 

     private static final long serialVersionUID = 1L; 

     Hashtable<String, String> receivedContentTypes = new Hashtable<String, String>(); 
     /** 
     * Maintain a list with received files and their content types. 
     */ 
     Hashtable<String, File> receivedFiles = new Hashtable<String, File>(); 

     /** 
     * Override executeAction to save the received files in a custom place 
     * and delete this items from session. 
     */ 
     @Override 
     public String executeAction(HttpServletRequest request, List<FileItem> sessionFiles) throws UploadActionException { 
     String response = ""; 
     int cont = 0; 
     for (FileItem item : sessionFiles) { 
      if (false == item.isFormField()) { 
      cont ++; 
      try { 
       /// Create a new file based on the remote file name in the client 
       // String saveName = item.getName().replaceAll("[\\\\/><\\|\\s\"'{}()\\[\\]]+", "_"); 
       // File file =new File("/tmp/" + saveName); 

       /// Create a temporary file placed in /tmp (only works in unix) 
       // File file = File.createTempFile("upload-", ".bin", new File("/tmp")); 

       /// Create a temporary file placed in the default system temp folder 
       File file = File.createTempFile("upload-", ".bin"); 
       item.write(file); 

       /// Save a list with the received files 
       receivedFiles.put(item.getFieldName(), file); 
       receivedContentTypes.put(item.getFieldName(), item.getContentType()); 

       /// Send a customized message to the client. 
       response += "File saved as " + file.getAbsolutePath(); 

      } catch (Exception e) { 
       throw new UploadActionException(e.getMessage()); 
      } 
      }} 
     /// Remove files from session because we have a copy of them 
     removeSessionFileItems(request); 

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

的web.xml

   <servlet> 
<servlet-name>UploadServlet</servlet-name> 
<servlet-class>com.dashboard.server.DashBoardUploadServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>UploadServlet</servlet-name> 
    <url-pattern>/Upload</url-pattern> 
    </servlet-mapping> 
+0

使用FileUpload並將其添加到formPanel。 form.setEncoding(FormPanel.ENCODING_MULTIPART); form.setMethod(FormPanel.METHOD_POST); – swamy 2013-02-26 12:07:32

回答

1

servlet-mappingweb.xml不正確。你必須把它改成這樣:

<servlet-mapping> 
    <servlet-name>UploadServlet</servlet-name> 
    <url-pattern>*.gupld</url-pattern> 
</servlet-mapping> 

如果您檢查與螢火蟲或Chrome瀏覽器開發工具的瀏覽器 - 服務器的對話框,你應該看到404 HTTP errors

+1

是的,這是非常正確的,默認情況下,gwtupload將servlet路徑設置爲'servlet.gupld',所以'* .gupld'模式是最好的選擇,因爲他們在[documentation](http://code.google.nl/)中說過。 COM/p/gwtupload /維基/ GwtUpload_GettingStarted)。開發人員可以覆蓋此路徑,在這種情況下@junaidp應該調用defaultUploader.setServletPath(「/ Upload」),如果他不想像@Manolo所說的那樣更改'web.xml'的話。 – 2013-02-27 17:16:28

0

在客戶端試試這個代碼。

public void onModuleLoad() { 

    final FormPanel form = new FormPanel(); 
    form.setAction("/myFormHandler"); 

    form.setEncoding(FormPanel.ENCODING_MULTIPART); 
    form.setMethod(FormPanel.METHOD_POST); 
    VerticalPanel panel = new VerticalPanel(); 
    form.setWidget(panel); 

    FileUpload upload = new FileUpload(); 
    upload.setName("uploadFormElement"); 
    panel.add(upload); 

    // Add a 'submit' button. 
    panel.add(new Button("Submit", new ClickListener() { 
     public void onClick(Widget sender) { 
     form.submit(); 
     } 
    })); 




    RootPanel.get().add(form); 
    } 

請點擊此鏈接 file upload

+0

這個文件將在哪裏上傳後,我想做一些工作在這個文件,從哪裏我可以檢索這個上傳的文件 – junaidp 2013-02-27 05:54:33

+0

你會得到這隻在服務器檢查鏈接 – Parvathy 2013-02-27 05:58:40

+0

但在GWT的開發模式,有沒有辦法我能得到它 ? – junaidp 2013-02-27 07:52:11

0

只需添加你的主機路徑

字符串頁= GWT.getModuleBaseURL()+ 「上傳」; 和您的

servlet調用路徑defaultUploader.setServletPath(page); 它完美地工作.. 如果你也想上傳文件上比你開車路徑上的servlet文件夾名稱添加本地文件夾..

0

您din't添加你的servlet路徑,添加multiUploader.setServletPath(「your_servlet_path」) ; 另外,通過添加multiuploader.setAutoSubmit(true)提交上傳