Храните PDF в течение ограниченного времени на сервере приложений и сделайте его доступным для загрузки

Привет, я использую PrimeFaces 5/JSF 2 и tomcat!

Может ли кто-нибудь показать мне или дать мне представление о том, как хранить pdf-файлы в течение ограниченного времени на сервере приложений (я использую tomcat), а затем загрузить его (если этого требует пользователь). Эта функциональность относится к счетам, поэтому я не могу использовать dataExporter.

Чтобы быть более конкретным, я в значительной степени реализовал это, но я не уверен в этом. Один большой вопрос... где мне хранить мои сгенерированные файлы? Я просмотрел, и люди сказали, что не стоит сохранять файлы в webApp или в каталоге tomcat. Какие другие решения у меня есть?

2 ответа

Решение

Использовать File#createTempFile() объект. Управляемая servletcontainer временная папка доступна как атрибут области приложения с ServletContext.TEMPDIR в качестве ключа.

String tempDir = (String) externalContext.getApplicationMap().get(ServletContext.TEMPDIR);
File tempPdfFile = File.createTempFile("generated-", ".pdf", tempDir);
// Write to it.

Затем просто передайте автоматически сгенерированное имя файла тому, кто отвечает за его обслуживание. Например

String tempPdfFileName = tempPdfFile.getName();
// ...

Наконец, как только тот, кто отвечает за его обслуживание, вызывается с именем файла в качестве параметра, например, с простым сервлетом, тогда просто выполните потоковую передачу следующим образом:

String tempDir = (String) getServletContext().getAttribute(ServletContext.TEMPDIR);
File tempPdfFile = new File(tempDir, tempPdfFileName);
response.setHeader("Content-Type", "application/pdf");
response.setHeader("Content-Length", String.valueOf(tempPdfFile.length()));
response.setHeader("Content-Disposition", "inline; filename=\"generated.pdf\"");
Files.copy(tempPdfFile.toPath(), response.getOutputStream());

Смотрите также:

Ваш вопрос неопределенный, но если мое понимание хорошее

Во-первых, если вы хотите хранить PDF в течение ограниченного времени, вы можете создать работу, которая будет чистить вас PDF-файлы каждый день или неделю, или все, что вам нужно.

Для загрузки вы можете использовать <p:fileDownload> ( http://www.primefaces.org/showcase/ui/file/download.xhtml) для загрузки любого файла с сервера приложений.

Другие вопросы по тегам