RestEasy客户端框架文件上传

时间:2012-05-29 23:45:44

标签: file-upload client 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);

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

2 个答案:

答案 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类在此处加载到字节数组中。您可以根据需要创建字节数组。