有没有人知道如何使用以下两个界面签名创建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);
任何帮助将不胜感激, 弗雷德里克
答案 0 :(得分:8)
使用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));
答案 1 :(得分: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
Resources类在此处加载到字节数组中。您可以根据需要创建字节数组。