2017-04-27 2 views
1

Ich habe einen gwt-Client und jetzt versuche ich, die Datei des Benutzers (Bild) auf den Server zu übertragen und sie zu speichern. Können Sie mir erklären, wie Sie Dateien von GWT mit FileUpload über RestyGWT übertragen können? Ich habe festgestellt, dass FormPanel zu verwenden ist, ich denke, dass ich SetAction() und Submit() -Methode verwenden muss, aber ich RestyGWT verwende, und ich kann nicht verstehen, wie kann ich Daten über restyGWT übertragen?Übertragung der Datei vom GWT-Client mit FileUpload über RestyGWT

Kunde:

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); 

Server-Seite:

@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); 

} 

Antwort

0

Kunde

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

Dies wird eine Standard-Multipart-requert an den Server senden. Dort müssen Sie nur die Teile lesen (in diesem Beispiel haben Sie einen "id" -Teil und einen "abcupload" -Teil, der die Datei darstellt).

Ich kann keinen Java-serverseitigen Code posten, da ich C# immer serverseitig verwende, aber es sollte nur die Standardmethode zum Lesen einer mehrteiligen POST-Anfrage sein.

Verwandte Themen