3
什麼是實現這一目標的最佳方式:Jersey客戶端API - 發佈的InputStream
我的應用程序允許用戶上傳圖片,這是通過RESTful服務,編碼爲「多/表單數據」來完成。
現在,在服務的主體中,我並不需要保存這個文件,但我想用它來傳入並調用另一個服務,所以我可以使用Jersey Client API來製作另一個電話,而不一定需要將文件保存到磁盤,然後傳入所謂的「臨時」文件。
這是我的一些代碼:
@Path("/file")
public class UploadFileService {
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail) {
//Given that I have ‘uploadedInputStream’ can I just pass this
//directly into the second call, below?
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource wr = client.resource(baseURI);
ClientResponse response = wr.type("image/*")
.entity(uploadedInputStream) //legal??
.post(ClientResponse.class);
}
}
我猜上述的替代方法是臨時保存文件,然後將java.io.File的實例傳遞給entity()方法。但是,這有可能擺脫這種情況嗎?
上提交錯誤InputStream是消耗字節的合約,而OutputStream用於提供。在這種情況下,您想爲遠程資源提供數據,因此應使用OutputStream。 – Jonas
Naah。取決於你選擇哪個視角。如果我想給你一些數據,*如果我給你一個'OutputStream',你*不會那麼高興。 – aioobe