Java 如何永久存储用户';s文档服务器端?

Java 如何永久存储用户';s文档服务器端?,java,jsf,Java,Jsf,我需要在服务器端的应用程序上存储用户的个人资料图片。我通过JSF(使用Primefaces)将其存储在文件系统中。但是,文档当前存储在tmp文件夹中,但在每次重新启动服务器后会被删除 我应该如何储存需要永久保存的文件 我一直通过web.xml提供目录路径,如下所示: 我是否只需要将路径更改为服务器上的永久位置 (我正在使用Primefaces uploadFile组件来促进此上载) PrimeFaces文件上载筛选器 org.primefaces.webapp.filter.FileUplo

我需要在服务器端的应用程序上存储用户的个人资料图片。我通过JSF(使用Primefaces)将其存储在文件系统中。但是,文档当前存储在tmp文件夹中,但在每次重新启动服务器后会被删除

我应该如何储存需要永久保存的文件


我一直通过web.xml提供目录路径,如下所示: 我是否只需要将路径更改为服务器上的永久位置

(我正在使用Primefaces uploadFile组件来促进此上载)


PrimeFaces文件上载筛选器
org.primefaces.webapp.filter.FileUploadFilter
阈值大小
51200
上传目录
/tmp
PrimeFaces文件上载筛选器
Facesservlet

将其存储在永久位置,而不是临时位置。为准备好的文件夹提供绝对磁盘文件系统路径,该文件夹具有足够的Java读/写权限。如有必要,可以将路径配置为系统属性或属性文件。例如。 作为系统属性(指定为VM参数):

-Dfiles.location=/path/to/files
然后,您可以通过以下方式找到该文件:

File file = new File(System.getProperty("files.location"), filename);
// ...
或者,您可以将其存储在DB中,但在DBs中存储二进制数据通常不受欢迎,因为它不可索引/可搜索/可链接,因此无法实现在DB中存储的唯一目的

另见:

如果您需要永久保存它们,为什么要将它们存储在tmp文件夹中?我不想!我在问我如何改变这一点?谢谢巴卢斯。请重温我编辑过的问题。我正在通过web.xml配置路径。我可以在那里更改它吗?不,当文件超过阈值大小时,应该在那里临时存储文件(否则服务器的内存会爆炸)。你需要自己把它写到一个更固定的地方。获取上传文件的
InputStream
,并将其写入永久文件的
OutputStream
。您可以使用
File#createTempFile(前缀、后缀、文件夹)
确保文件名的唯一性。另请参见,例如和。
File file = new File(System.getProperty("files.location"), filename);
// ...