Подтвердить что ты не робот

Загрузка файла фреймворка RestEasy

Кто-нибудь знает, как создавать вызовы на стороне клиента RestEasy для загрузки файла с использованием следующих двух сигнатур интерфейса? Я не нахожу никакой информации вообще. Я знаю, как это сделать с помощью HttpClient, но я бы хотел использовать клиентский прокси, чтобы он был согласован.

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

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

4b9b3361

Ответ 1

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

Ответ 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 test; он не нужен. thermo.wav указан @FormParam("file") и загружается здесь в массив байтов, используя класс Google Guava's Resources. Вы можете создать массив байтов, но вы хотите.