2012-06-13 96 views
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()方法。但是,這有可能擺脫這種情況嗎?

+0

上提交錯誤InputStream是消耗字節的合約,而OutputStream用於提供。在這種情況下,您想爲遠程資源提供數據,因此應使用OutputStream。 – Jonas

+0

Naah。取決於你選擇哪個視角。如果我想給你一些數據,*如果我給你一個'OutputStream',你*不會那麼高興。 – aioobe

回答