一尘不染

在有限的时间内将PDF存储在应用服务器上,并使其可供下载

tomcat

嘿,我正在使用PrimeFaces 5 / JSF 2和tomcat!

有人可以给我展示一下还是给我一个关于如何在有限的时间内在应用服务器上存储pdf的想法(我正在使用tomcat)然后下载(如果用户要求的话)。此功能与发票有关,因此我不能使用dataExporter。

更具体地说,我几乎实现了这一点,但我对此不太确定。一个大问题是…我应将生成的文件存储在哪里?我四处浏览,人们说不能将文件保存在webApp或tomcat目录中。我还有什么其他解决方案?


阅读 462

收藏
2020-06-16

共1个答案

一尘不染

利用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());
2020-06-16