2012-12-14 15 views
12

Potrzebuję pobrać plik pdf, korzystając z usług sieci Web Jersey Wykonuję już następujące czynności, ale otrzymany rozmiar pliku wynosi zawsze 0 (zero).Jak pobrać plik PDF za pomocą 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(); 

} 

Proszę, pomóżcie zrobić to we właściwy sposób, dziękuję!

Odpowiedz

4

Nie możesz po prostu dać File jako encji, to nie działa w ten sposób.

Musisz sam odczytać plik i podać dane (jako byte[]) jako jednostkę.

Edit:
Można również zajrzeć do streamingu wyjście. Ma to dwie zalety; 1) pozwala ci używać plików serwujących bez nakładu pamięci związanego z koniecznością przeczytania całego pliku i 2) zaczyna wysyłać dane do klienta natychmiast, bez konieczności uprzedniego odczytu całego pliku. Zobacz https://stackoverflow.com/a/3503704/443515, aby zobaczyć przykład przesyłania strumieniowego.

0

Dla przyszłych gości,

ten znajdzie blob znajdujący się na przekazany ID i zwraca go jako dokumentu PDF w przeglądarce (zakładając, że jest to pdf przechowywane w bazie danych):

@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(); 
} 
Powiązane problemy