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