15

有谁知道如何创建 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);

任何帮助将不胜感激,弗雷德里克

4

2 回答 2

9

使用 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));
于 2013-11-14T20:24:13.120 回答
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您可以根据需要创建字节数组。

于 2013-03-30T03:30:13.750 回答