我认为,将用户文件保存到 Web 应用程序的 WebContent 文件夹是不正确的(至少,不是很方便)。WebContent 文件夹用于存放在 Web 应用程序存档中分布的资源。
通常的做法是将磁盘上的某个特定位置用于计划重复使用的用户文件。
1) 要在配置文件中指定位置,请在应用程序 CLASSPATH 的根目录中创建文件 app.properties。在此文件中,您将拥有该属性
user.pdfs.location=/path/to/user/pdfs
要读取该属性,请在您的 servlet 中使用以下代码:
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream propsStream = classLoader.getResourceAsStream("app.properties");
Properties properties = new Properties();
properties.load(propsStream);
String userPdfsPath = properties.getProperty("user.pdfs.location");
因此,您将始终能够在已创建的 WAR 中更改“/WEB-INF/classes/app.properties”文件中 PDF 的位置。
2)或者您可以将参数传递给Tomcat的JVM:
-Duser.pdfs.location="/path/to/user/pdfs"
要读取参数的值,请使用以下代码:
String userPdfsPath = System.getProperty("user.pdfs.location");
另一种流行(但并不总是正确)的方法是将文件作为 BLOB 保存到数据库中。考虑到在这种情况下,您有时可能会遇到应用程序性能或备份问题。
如果您想使用临时文件(例如,您想创建 PDF 供用户下载),您应该使用 JVM 的临时目录。获取临时目录使用
String tempDirPath = System.getProperty("java.io.tmpdir");
或者简单地创建临时 PDF 文件
File tempPDF = File.createTempFile("temp-", ".pdf");