2010-04-14 12 views
23

(konkretnie RESTeasy)Jak mogę załadować plik wieloczęściowy/formularz z jax-rs?

Byłoby miło (na jednym pliku), aby mieć podpis metody jak:

public void upload(@FormParam("name") ..., @FormParam("file") file: InputStream) 
... 

wykonalne? Czy ja śnię? nie wydaje się takie proste.

+0

Michael, co użyłeś przetestować tę usługę? Nie mogę wymyślić, jak skonfigurować żądanie ... – c12

Odpowiedz

26

Kluczem jest wykorzystanie adnotacji @MultipartForm dostarczanych z funkcją RESTEasy. Umożliwia to zdefiniowanie POJO, który zawiera wszystkie części formularza i łatwe powiązanie.

Weźmy na przykład następujące POJO:

public class FileUploadForm { 
    private byte[] filedata; 

    public FileUploadForm() {} 

    public byte[] getFileData() { 
     return filedata; 
    } 

    @FormParam("filedata") 
    @PartType("application/octet-stream") 
    public void setFileData(final byte[] filedata) { 
     this.filedata = filedata; 
    } 
} 

Teraz wszystko co musisz zrobić, to skorzystać z tej POJO w jednostce, która będzie wyglądać mniej więcej tak:

@POST 
@Path("/upload") 
@Consumes("multipart/form-data") 
public Response create(@MultipartForm FileUploadForm form) 
{ 
    // Do something with your filedata here 
} 
+1

raiglstorfer, w jaki sposób skonfigurowałbyś żądanie przetestowania tej usługi? – c12

+1

@ c12 Używam cURL do testowania moich metod RESTeasy. Coś takiego powinno działać: 'curl -F [email protected] http: // localhost: 8080/Project/rest-servlet/upload', więcej informacji tutaj: [link] (http://curl.haxx.se /) –