2012-05-29 9 views
12

¿Alguien sabe cómo crear las llamadas del lado del cliente de RestEasy para cargar un archivo utilizando las dos firmas de interfaz siguientes? No encuentro ninguna información en absoluto. Sé cómo hacerlo usando HttpClient, pero me gustaría utilizar el proxy del cliente para mantenerlo constante.Carga del archivo de marco de cliente de 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); 

Cualquier ayuda se agradece, Fredrik

Respuesta

2

pasé un montón de tiempo buscando una respuesta a esto, pero finalmente descubierto la manera de hacer que funcione. Es necesario añadir:

resteasy-multipart-provider-2.3.5.Final.jar 

a la ruta de clases (o cualquier versión de resteasy que está utilizando). A continuación, puede hacer algo de esta 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()); 

La última línea es sólo una afirmación JUnit prueba; no es necesario thermo.wav se especifica en @FormParam("file") y se carga aquí en una matriz de bytes utilizando la clase de recursos Google Guava's. Puede crear la matriz de bytes como lo desee.

+0

donde se define la variable '' recording'' por cierto? –

7

Con RESTEasy 3.0.x una carga de archivos a través de MultipartFormData podría tener este aspecto:

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 se encuentra en el paquete org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataOutput –

Cuestiones relacionadas