2012-05-29 14 views
12

Có ai biết cách tạo các cuộc gọi phía khách hàng RestEasy để tải lên tệp bằng hai chữ ký giao diện sau không? Tôi không tìm thấy bất kỳ thông tin nào cả. Tôi biết làm thế nào để làm điều đó bằng cách sử dụng HttpClient nhưng tôi muốn sử dụng proxy của khách hàng để giữ cho nó phù hợp.Tải xuống tệp khuôn khổ khách hàng RestEasy

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

Bất kỳ trợ giúp sẽ được đánh giá cao, Fredrik

Trả lời

2

tôi đã dành một bó thời gian nhìn xung quanh cho một câu trả lời cho điều này, nhưng cuối cùng tôi đã tìm ra cách để làm cho nó làm việc. Bạn cần phải thêm:

resteasy-multipart-provider-2.3.5.Final.jar 

vào đường dẫn lớp (hoặc bất kỳ phiên bản resteasy nào bạn đang sử dụng). Sau đó, bạn có thể làm điều gì đó của biểu mẫu này:

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

Dòng cuối cùng chỉ là JUnit xác nhận kiểm tra; nó không cần thiết. thermo.wav được chỉ định bởi @FormParam("file") và được tải ở đây vào một mảng byte sử dụng Google Guava's Lớp tài nguyên. Bạn có thể tạo mảng byte tuy nhiên bạn muốn.

+0

nơi được định nghĩa biến '' recording'' bằng cách này? –

7

Với RESTEasy 3.0.x tải lên tập tin qua MultipartFormData có thể trông như thế này:

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

MultipartFormDataOutput nằm trong gói org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataOutput –