2012-05-29 3 views
12

Кто-нибудь знает, как создать вызовы на стороне клиента RestEasy для загрузки файла с использованием следующих двух сигнатур интерфейса? Я не нахожу никакой информации вообще. Я знаю, как это сделать с помощью HttpClient, но я бы хотел использовать клиентский прокси, чтобы он был последовательным.Загрузите файл фреймворка 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); 

Любая помощь будет оценена, Фредрик

ответ

2

Я потратил кучу времени на поиск ответа на это, но я наконец-то понял, как заставить его работать. Вам нужно добавить:

resteasy-multipart-provider-2.3.5.Final.jar 

на свой путь к классам (или любой другой версии resteasy вы используете). Затем вы можете сделать что-то из этой формы:

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

Последняя строка является только JUnit тест утверждение; он не нужен. thermo.wav указан @FormParam("file") и загружается здесь в массив байтов, используя Google Guava's Класс ресурсов. Вы можете создать массив байтов, как хотите.

+0

где определяется переменная '' recording'', кстати? –

7

С Resteasy 3.0.x загрузка файлов через MultipartFormData может выглядеть следующим образом:

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 находится в пакете org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataOutput –