我需要使用Jersey Web Services下载pdf文件 我已经执行了以下操作,但收到的文件大小始终为0(零)。
@Produces({"application/pdf"})
@GET
@Path("/pdfsample")
public Response getPDF() {
File f = new File("D:/Reports/Output/Testing.pdf");
return Response.ok(f, "application/pdf").build();
}
请帮助做正确的方法,谢谢!!
答案 0 :(得分:12)
Mkyong总是提供。看起来你唯一缺少的是正确的响应标题。
http://www.mkyong.com/webservices/jax-rs/download-excel-file-from-jax-rs/
@GET
@Path("/get")
@Produces("application/pdf")
public Response getFile() {
File file = new File(FILE_PATH);
ResponseBuilder response = Response.ok((Object) file);
response.header("Content-Disposition","attachment; filename=test.pdf");
return response.build();
}
答案 1 :(得分:3)
你不能只提供File
作为实体,它不能像那样工作。
您需要自己阅读文件并将数据(作为byte[]
)作为实体提供。
修改强>
您可能还想查看流式输出。这有两个好处; 1)它允许你使用服务文件而不需要读取整个文件的内存开销; 2)它开始直接向客户端发送数据,而不必先读取整个文件。有关流媒体的示例,请参阅https://stackoverflow.com/a/3503704/443515。
答案 2 :(得分:1)
对于未来的访客,
这将找到位于传递的ID的blob并将其作为PDF文档返回到浏览器中(假设它是存储在数据库中的pdf):
@Path("Download/{id}")
@GET
@Produces("application/pdf")
public Response getPDF(@PathParam("id") Long id) throws Exception {
Entity entity = em.find(ClientCase.class, id);
return Response
.ok()
.type("application/pdf")
.entity(entity.getDocument())
.build();
}