Подтвердить что ты не робот

Как скачать PDF файл с помощью Джерси?

Мне нужно скачать pdf файл с помощью веб-служб Jersey Я уже делаю следующее, но размер полученного файла всегда равен 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();

 }

Пожалуйста, помогите сделать правильный путь, спасибо!

4b9b3361

Ответ 1

Вы не можете просто указать File как сущность, это не работает.

Вам необходимо прочитать файл самостоятельно и предоставить данные (как byte[]) в качестве объекта.

Edit:
Вы также можете посмотреть потоковое воспроизведение. Это имеет два преимущества; 1) он позволяет использовать файлы сервисов без накладных расходов памяти, чтобы прочитать весь файл, и 2) он сразу же отправляет данные клиенту без необходимости сначала читать весь файл. См. fooobar.com/questions/57617/... для примера потоковой передачи.

Ответ 3

Для будущих посетителей

Это обнаружит 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();
}