【问题标题】:Jersey Client API - POSTing InputStreamJersey 客户端 API - 发布 InputStream
【发布时间】:2012-06-13 16:23:36
【问题描述】:

什么是最好的实现方式:

我的应用程序允许用户上传图片,这是通过 RESTful 服务完成的,编码为“multipart/form-data”。

现在,在服务的主体中,我真的不需要保存这个文件,但我想用它来传递并调用另一个服务。那么我是否可以使用 Jersey 客户端 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。
  • 不。取决于你选择哪种视角。如果我想给你一些数据,如果我给你OutputStream不会那么高兴。

标签: java rest jersey


【解决方案1】:

是的,这应该可以。如果没有,请在http://java.net/jira/browse/JERSEY 提交错误

【讨论】:

    猜你喜欢
    • 2014-12-24
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多