2012-05-29 10 views
12

Qualcuno sa come creare le chiamate lato client RestEasy per caricare un file utilizzando le seguenti due firme dell'interfaccia? Non sto trovando alcuna informazione. So come farlo usando HttpClient ma mi piacerebbe usare il proxy client per mantenerlo coerente.Caricamento file framework client RestEasy

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

Qualsiasi aiuto sarebbe apprezzato, Fredrik

risposta

2

ho passato un sacco di tempo guardando intorno per una risposta a questo, ma alla fine ho capito come farlo funzionare. È necessario aggiungere:

resteasy-multipart-provider-2.3.5.Final.jar 

al classpath (o qualunque versione di resteasy che si sta utilizzando). È quindi possibile fare qualcosa di questa forma:

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

L'ultima riga è solo un'asserzione JUnit prova; non è necessario thermo.wav è specificato da @FormParam("file") e viene caricato qui in un array di byte utilizzando la classe di risorse Google Guava's. È possibile creare l'array di byte come si desidera.

+0

in cui è definita la variabile '' recording'' a proposito? –

7

Con RESTEasy 3.0.x un caricamento di file tramite MultipartFormData potrebbe essere la seguente:

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 è nel pacchetto org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataOutput –

Problemi correlati