Jsf 在app server上有限时间存储PDF,并可供下载

Jsf 在app server上有限时间存储PDF,并可供下载,jsf,tomcat,pdf,primefaces,download,Jsf,Tomcat,Pdf,Primefaces,Download,嗨,我正在使用PrimeFaces5/JSF2和tomcat 有人能告诉我或者告诉我如何在应用服务器(我正在使用tomcat)上有限时间地存储PDF,然后下载它(如果用户要求的话)。此功能与发票相关,因此我无法使用dataExporter 更具体地说,我基本上实现了这一点,但我对此不太确定。一个大问题是。。。我在哪里存储生成的文件?我浏览了一下,人们说把文件保存在webApp或tomcat目录中是不合适的。我还有什么别的解决办法 你的问题很模糊,但如果我理解得好: 首先,如果你想在有限的时间内存

嗨,我正在使用PrimeFaces5/JSF2和tomcat

有人能告诉我或者告诉我如何在应用服务器(我正在使用tomcat)上有限时间地存储PDF,然后下载它(如果用户要求的话)。此功能与发票相关,因此我无法使用dataExporter


更具体地说,我基本上实现了这一点,但我对此不太确定。一个大问题是。。。我在哪里存储生成的文件?我浏览了一下,人们说把文件保存在webApp或tomcat目录中是不合适的。我还有什么别的解决办法

你的问题很模糊,但如果我理解得好:

首先,如果你想在有限的时间内存储PDF,你可以创建一个每天或每周或任何你需要的工作来清理PDF

对于下载端,您可以使用
()从应用程序服务器下载任何文件。

使用facility。servletcontainer管理的临时文件夹可以作为应用程序范围的属性和as键使用

然后只需将自动生成的文件名传递给负责提供该文件的人。例如

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());
另见:

只是一个观察,行:
String tempDir=(String)getServletContext().getAttribute(ServletContext.tempDir)
给出ClassCastException,因为它返回的是文件而不是字符串。
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());