Filesystems 在文件系统中存储上传文件的最佳实践

Filesystems 在文件系统中存储上传文件的最佳实践,filesystems,uploading,Filesystems,Uploading,存储用户上传的文件的最佳做法是什么 目前,我正在使用以下方法存储文件: <web_app_root>/course_material/<term_id>/<course_id>/<file_id> /course\u材料/// 如您所见,文件是根据数据库中的键存储的。我认为这样更安全,因为我不必过滤文件名,也不必将不安全字符转换为安全字符 然而,我正在启动一个新项目,我想知道将web应用程序的文件系统与数据库如此紧密地联系在一起是否是个坏主意。

存储用户上传的文件的最佳做法是什么

目前,我正在使用以下方法存储文件:

<web_app_root>/course_material/<term_id>/<course_id>/<file_id>
/course\u材料///
如您所见,文件是根据数据库中的键存储的。我认为这样更安全,因为我不必过滤文件名,也不必将不安全字符转换为安全字符

然而,我正在启动一个新项目,我想知道将web应用程序的文件系统与数据库如此紧密地联系在一起是否是个坏主意。我应该以更易于阅读的格式存储文件吗

<web_app_root>/course_material/<term_name_underscored>/<course_name_underscored>/<file_name_underscored>
/course\u材料///

如果是这样,为了安全起见,过滤掉文件名的最佳方法是什么?或者我目前的做法是最佳做法吗?

我总是使用基于GUID的唯一文件名将文件存储在目录中,并将GUID映射到数据库中的文件。只要您不是手动浏览文件等,这可能是最简单的解决方案(也可以绕过无效字符)

另一种选择是将它们作为blob存储在数据库中。我也这样做过——但这是为了填补复制灾难恢复场景的空白,现代NAS设备应该处理这一场景


如果出于某种原因,您认为需要在应用程序之外手动浏览文件,那么使用长或短名称(无论您希望如何浏览它们)会更干净。

我建议您将其从web\u应用程序根目录中删除


我喜欢您在第一个示例中的做法。

只要文件目录在htdocs目录之外,一切都应该正常,对吗?我只想将与特定项目相关的所有内容都保存在自己的目录中。实际上,我在谈论安全性。但是一个分离的圆盘是更好的解决方案。