RestEasy客户端框架文件上传

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

希望能得到任何帮助, Fredrik

2个回答

10

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

MultipartFormDataOutput位于org.jboss.resteasy.plugins.providers.multipart包中。 - bugs_

2

我花了很多时间寻找答案,但最终我找到了解决方法。您需要添加:

resteasy-multipart-provider-2.3.5.Final.jar 

resteasy的版本添加到你的classpath中。然后你可以这样做:
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 测试断言;它不是必需的。 @FormParam("file") 指定了 thermo.wav,并在此处使用 Google Guava 的 Resources 类将其加载到字节数组中。您可以按任何方式创建字节数组。


顺便问一下,变量“recording”在哪里定义的? - Pietro Di Bello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接