2012-12-14 114 views
12

我需要使用Jersey Web Services下载pdf文件 我已经做了以下操作,但收到的文件大小始终为0(零)。如何使用Jersey下载PDF文件?

@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(); 

} 

请帮忙做正确的方法,谢谢!

回答

4

你不能只给一个File作为实体,它不会这样工作。

您需要自己读取文件并将数据(作为byte[])作为实体。

编辑:
您可能还想看看流输出。这有两个好处; 1)它允许您使用服务文件,而无需读取整个文件的内存开销,以及2)开始直接向客户端发送数据,而无需先读取整个文件。有关流式传输的示例,请参阅https://stackoverflow.com/a/3503704/443515

0

对于未来的游客,

这将找到位于通过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(); 
}