2017-04-27 69 views
1

我有一個gwt客戶端,現在我試圖將用戶的文件(圖像)傳輸到服務器並將其保存。你能解釋我如何使用FileUpload通過RestyGWT從GWT傳輸文件。我發現這是使用FormPanel nessesary,我認爲我必須使用setAction()和submit()方法,但我使用RestyGWT,並且我無法理解如何通過restyGWT傳輸數據?使用FileUpload通過RestyGWT傳輸文件從GWT客戶端

客戶端:

private FormPanel fileUploadPanel; 
private FileUpload fileUpload; 
private void create() { 
//Some code // 
    fileUpload = new FileUpload(); 
    fileUploadPanel = new FormPanel(); 
    fileUploadPanel.setMethod(FormPanel.METHOD_POST); 
    fileUploadPanel.setEncoding(FormPanel.ENCODING_MULTIPART); 
    fileUpload.setName("upload"); 
    fileUploadPanel.setAction("http://localhost:8080/api/events/upload"); 
    fileUploadPanel.add(fileUpload); 
//Some code// 
} 


@POST 
@Path("UPLOAD_PATH") 
void uploadImage(/*i don't know how what must be here */, 
      MethodCallback callback); 

服務器端:

@Path("/upload") 
@POST 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public void uploadImage(
     @FormDataParam("upload") InputStream uploadedInputStream, 
     @FormDataParam("upload") FormDataContentDisposition fileDetail) { 

    String uploadedFileLocation = "some_path" + fileDetail.getFileName(); 

    writeToFile(uploadedInputStream, uploadedFileLocation); 

} 

回答

0

客戶

public UploadPanel() 
{ 
    Div div = new Div(); 

    final FormPanel formPanel = new FormPanel(); 
    formPanel.setEncoding(FormPanel.ENCODING_MULTIPART); 
    formPanel.setMethod(FormPanel.METHOD_POST); 
    formPanel.setAction("uploadFileServletUrl"); 
    formPanel.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() 
    { 
     @Override 
     public void onSubmitComplete(SubmitCompleteEvent event) 
     { 
     GWT.log("event.getResults = " + event.getResults()); 
     } 
    }); 

    FileUpload fileUpload = new FileUpload(); 
    fileUpload.getElement().setAttribute("multiple", null); 
    fileUpload.setName("abcupload"); 
    div.add(fileUpload); 
    Hidden hidden = new Hidden("id", "8"); //just an example of how to pass a parameter 
    div.add(hidden); 

    Button butUpload = new Button("Upload"); 
    div.add(butUpload); 
    butUpload.addClickHandler(new ClickHandler() 
    { 
     @Override 
     public void onClick(ClickEvent event) 
     { 
      formPanel.submit(); 
     } 
    }); 

    formPanel.add(div); 
    this.initWidget(formPanel); 
} 

這將發佈一個標準的多requert到服務器。在那裏你只需要閱讀零件(在這個例子中,你將有一個「ID」部分和一個「abcupload」部分,它將成爲文件)。

我不能發佈任何Java服務器端代碼,因爲我總是在服務器端使用C#,但它應該只是在多部分POST請求中讀取的標準方式。

相關問題