存储上传文件的最佳实践——文件系统存储

5

关于存储用户上传的文件,最佳实践是什么?

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

<web_app_root>/course_material/<term_id>/<course_id>/<file_id>

如您所见,文件是根据数据库中的键存储的。我认为这样更安全,因为我不必过滤文件名并将不安全的字符转换为安全字符。

然而,我正在开始一个新项目,并想知道将Web应用程序的文件系统与数据库紧密联系在一起是否是一个坏主意。我应该以更易于人类阅读的格式存储文件吗?

<web_app_root>/course_material/<term_name_underscored>/<course_name_underscored>/<file_name_underscored>

如果需要,那么最安全的过滤文件名的方法是什么?或者我当前所采用的方式是最佳实践吗?

2个回答

1

我一直都是将文件存储在带有唯一 GUID 命名的目录中,并将 guid 映射到 DB 中的文件。只要您不手动浏览文件之类的操作,这可能是最简单的解决方案(也可以避免无效字符)。

另一个选项是将它们作为 BLOB 存储在数据库中。我也做过这个 - 但这是为了填补复制 DR 场景的需要,现代 NAS 设备应该可以处理。

如果您因某种原因需要手动浏览应用程序外部的文件,则使用长名称或短名称(以任何您想要浏览的方式)会更清晰。


0

我建议你将它们从web_app_root中移除。

我喜欢你在第一个例子中的做法。


只要文件目录不在htdocs目录之内,一切都应该没问题吧?我只想把与特定项目相关的所有内容放在它自己的目录中。 - rlorenzo
确实谈论到安全性。但在我看来,使用一个独立的硬盘是更好的解决方案。 - user32415

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接