在不使用multipart的情况下在Jersey中上载文件

时间:2013-08-06 08:52:26

标签: file-upload jersey

我运行一个Web服务,将文件从一种文件格式转换为另一种文件格式。转换逻辑已经运行但现在,我想通过Jersey查询这个逻辑。每当通过Jersey的文件上传在教程/问题中解决时,人们都会描述如何使用多部分表单数据来完成此操作。但是,我只想发送并返回单个文件,并跳过发送多个部分的开销。 (web服务由我控制的另一台机器触发,因此不涉及HTML表单。)

我的问题是如何实现以下目标:

@POST
@Path("{sessionId"}
@Consumes("image/png")
@Produces("application/pdf")
public Response put(@PathParam("sessionId") String sessionId, 
                    @WhatToPutHere InputStream uploadedFileStream) {
  return BusinessLogic.convert(uploadedFile); // returns StreamingOutput - works!
}

如何掌握uploadedFileStream(应该是一些注释,我猜这当然不是@WhatToPutHere)。我想出了如何通过StreamingOutput直接返回文件。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您不必在函数的第二个参数中放置任何内容;只是留下它没有注释。 您唯一需要注意的是“命名”资源:

  

资源应该有一个像:someSite / someRESTEndPoint / myResourceId这样的函数,所以函数应该是:

@POST
@Path("{myResourceId}")
@Consumes("image/png")
@Produces("application/pdf")
public Response put(@PathParam("myResourceId") String myResourceId, 
                                               InputStream uploadedFileStream) {
    return BusinessLogic.convert(uploadedFileStream); 
}
  

如果你想使用某种SessionID,我更喜欢使用Header Param ...类似于:

@POST
@Path("{myResourceId}")
@Consumes("image/png")
@Produces("application/pdf")
public Response put(@HeaderParam("sessionId") String sessionId,
                    @PathParam("myResourceId") String myResourceId, 
                                               InputStream uploadedFileStream) {
    return BusinessLogic.convert(uploadedFileStream); 
}