2012-12-14 44 views
12

Tôi cần tải xuống tệp pdf bằng Dịch vụ Web Jersey tôi đã làm như sau nhưng kích thước tệp nhận được luôn bằng 0 (không).Cách tải xuống tệp PDF bằng Jersey?

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

} 

Xin vui lòng giúp đỡ để làm đúng cách, cảm ơn !!

Trả lời

4

Bạn không thể chỉ cho một thực thể là File, nó không hoạt động như thế.

Bạn cần tự mình đọc tệp và cung cấp dữ liệu (dưới dạng byte[]) làm thực thể.

Chỉnh sửa:
Bạn cũng có thể muốn xem luồng đầu ra. Điều này có hai lợi thế; 1) nó cho phép bạn sử dụng các tập tin phục vụ mà không cần phí trên bộ nhớ của việc phải đọc toàn bộ tập tin và 2) nó bắt đầu gửi dữ liệu cho khách hàng ngay lập tức mà không cần phải đọc toàn bộ tập tin đầu tiên. Xem https://stackoverflow.com/a/3503704/443515 để biết ví dụ về phát trực tuyến.

0

Đối với du khách trong tương lai,

này sẽ tìm ra blob nằm ở ID thông qua và trở lại nó như là một tài liệu PDF trong trình duyệt (giả sử đó là một pdf được lưu trữ trong cơ sở dữ liệu):

@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(); 
} 
Các vấn đề liên quan