【问题标题】:Best practices for storing uploaded files in filesystem在文件系统中存储上传文件的最佳实践
【发布时间】:2010-09-24 19:34:13
【问题描述】:

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

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

<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>

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

【问题讨论】:

    标签: filesystems uploading


    【解决方案1】:

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

    另一种选择是将它们作为 BLOBS 存储在数据库中。我也这样做了——但它是为了填充现代 NAS 设备应该处理的复制 DR 场景。

    如果您发现出于某种原因需要手动浏览应用程序外部的文件,那么使用长名称或短名称(无论您想浏览它们的方式)会更简洁。

    【讨论】:

      【解决方案2】:

      我建议你把它从 web_app_root 中取出来。

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

      【讨论】:

      • 只要文件目录在htdocs目录之外,一切都应该没问题吧?我只想将与特定项目相关的所有内容保存在其自己的目录中。
      • 确实在谈论安全性。但是单独的光盘是更好的解决方案恕我直言。
      猜你喜欢
      • 2012-12-12
      • 2012-07-24
      • 2011-03-10
      • 2014-01-13
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      相关资源
      最近更新 更多