2012-05-29 14 views
12

Kann jemand die RestEasy clientseitigen Aufrufe erstellen, um eine Datei mit den folgenden zwei Schnittstellensignaturen hochzuladen? Ich finde überhaupt keine Informationen. Ich weiß, wie man es mit dem HttpClient macht, aber ich möchte den Client-Proxy verwenden, um es konsistent zu halten.RestEasy-Client-Framework-Datei-Upload

@POST 
@Path("/upload") 
@Consumes("multipart/form-data") 
public void uploadFile(MultipartFormDataInput input); 

@POST 
@Path("/upload2") 
@Consumes("multipart/form-data") 
public void uploadFile2(@MultipartForm FileUploadForm form); 

Jede Hilfe würde geschätzt, Fredrik

Antwort

2

ich einen Haufen Zeit damit verbracht, um eine Antwort auf diese suchen, aber ich endlich herausgefunden, wie es funktioniert. Sie müssen hinzufügen:

resteasy-multipart-provider-2.3.5.Final.jar 

zu Classpath (oder was auch immer Version von resteasy Sie verwenden). Anschließend können Sie etwas von dieser Form tun:

ClientRequest add_request = request(); 

MultipartFormDataOutput upload = new MultipartFormDataOutput(); 
upload.addFormData("data", recording, MediaType.APPLICATION_XML_TYPE); 
upload.addFormData("file", Resources.toByteArray(Resources.getResource("thermo.wav")), MediaType.APPLICATION_OCTET_STREAM_TYPE); 

add_request.body(MediaType.MULTIPART_FORM_DATA_TYPE, upload); 

ClientResponse<?> recording_response = add_request.post(); 
Assert.assertEquals(Response.Status.CREATED, recording_response.getResponseStatus()); 

Die letzte Zeile ist nur eine JUnit Test Behauptung; es wird nicht benötigt. thermo.wav wird durch @FormParam("file") angegeben und wird hier in ein Byte-Array geladen, wobei Google Guava's Ressourcenklasse verwendet wird. Sie können das Byte-Array beliebig erstellen.

+0

wo die Variable '' durch die Art und Weise recording'' definiert ist? –

7

Mit Resteasy 3.0.X ein Datei-Upload über MultipartFormData könnte wie folgt aussehen:

ResteasyClient client = new ResteasyClientBuilder().build(); 

ResteasyWebTarget target = client.target("http://.../upload"); 

MultipartFormDataOutput mdo = new MultipartFormDataOutput(); 
mdo.addFormData("file", new FileInputStream(new File("....thermo.wav")), 
    MediaType.APPLICATION_OCTET_STREAM_TYPE); 
GenericEntity<MultipartFormDataOutput> entity = new GenericEntity<MultipartFormDataOutput>(mdo) {}; 

Response r = target.request().post(Entity.entity(entity, MediaType.MULTIPART_FORM_DATA_TYPE)); 
+0

MultipartFormDataOutput befindet sich im Paket org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataOutput –