0

我运行一个 Web 服务,在其中将文件从一种文件格式转换为另一种文件格式。转换逻辑已经在运行,但现在,我想通过 Jersey 查询这个逻辑。每当在教程/问题中解决通过 Jersey 上传文件时,人们都会描述如何使用多部分表单数据来做到这一点。然而,我只是想发送和返回一个文件并跳过发送多个部分的开销。(网络服务由我控制的另一台机器触发,因此不涉及 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.

谢谢你的帮助!

4

1 回答 1

2

您不必在函数的第二个参数中添加任何内容;不加注释就行了。您唯一需要注意的是“命名”资源:

资源应该有一个类似的 URI: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); 
}
于 2013-08-06T09:10:36.503 回答