Храните 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), чтобы загрузить любой файл с сервера приложений.