正如标题所说,在Java EE Web应用程序中保存上传文件的首选方法是什么?我读了一些其他问题的答案,如果没有进一步的解释,不建议将文件保存到servlet容器的文件系统。有人说你应该将它保存到数据库中(但我怀疑我之前读过的)有些人说你应该使用JCR,我能找到的唯一实现是Apache JackRabbit,它似乎不是很活跃?
什么是最好的选择?除了提到的那些之外还有吗?你选择一个而不是另一个的原因是适当的。
答案 0 :(得分:3)
根据您的环境,您可能希望执行以下操作之一:
您的服务器位于云端。您将需要使用共享云存储服务,例如Amazon S3(具有良好的API btw)
您托管在传统服务器上。在这种情况下,最佳做法是使用共享NAS,但除非您的客户有监管问题,否则云存储也是一种选择
您主要处理许多小(呃)文件,并希望它们可以搜索。对于此方案,您将选择BLOB数据库列。
如果您正在处理大型文件(如视频),您可能需要查看NAS /云存储,并将数据库仅用作对NAS / S3位置的引用
这些选项的原因是您不希望将数据沙箱映射到正在运行的实例。此体系结构允许将应用程序的其他实例联机或进行简单的服务器迁移,并且仍可访问共享数据。
答案 1 :(得分:1)
如果您使用任何形式的本地存储,您将无法轻松集群(因为并非所有节点都可以轻松访问所有文件),因此您需要选择可从所有群集节点访问的内容。 DB非常适合这种情况。根据您问题的具体情况,某种类型的集群缓存(或hadoop)也可能是合适的。
答案 2 :(得分:0)
在我看来这个问题这个问题取决于你想要保存什么。像高清视频这样的大文件可以通过文件系统更快地访问。另一方面,使用数据库会更容易,因为您不必知道文件实际已保存。
少量和小文件>数据库 否则文件系统
使用文件系统作为存储的另一个专业是能够实现像apache luscene这样的全文搜索框架。