有关存储用户上传文件的最佳做法是什么?
目前,我正在使用以下方法存储文件:
<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>
如果是这样,过滤掉文件名以保证安全的最佳方法是什么?或者我目前的做法是最佳做法?
答案 0 :(得分:1)
我总是将文件存储在具有唯一基于GUID的文件名的目录中,并将guid映射到数据库中的文件。只要您不是手动浏览文件等,这可能是最简单的解决方案(也可以解决无效字符)。
另一种选择是将它们作为BLOBS存储在数据库中。我也做了这个 - 但它是为了填补复制的DR场景,现代NAS设备应该处理它。
如果您因某种原因发现需要手动浏览应用程序外的文件,那么使用长名称或短名称(无论您想要浏览它们)都会更清晰。
答案 1 :(得分:0)
我建议你从web_app_root中取出。
我喜欢你在第一个例子中的表现。