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

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

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

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

Ответ 1

Используйте File#createTempFile(). Временная папка, управляемая сервлетконтейнером, доступна как атрибут области приложения с 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());

См. также:

Ответ 2

Ваш вопрос нечеткий, но если мое понимание хорошее:

Сначала, если вы хотите сохранить PDF в течение ограниченного времени, вы можете создать задание, которое очищает PDF файлы каждый день или неделю или все, что вам нужно.

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