我正在创建一个Web应用程序(在Django中),它需要允许用户上传文件(特别是图像,稍后会为其他用户显示)。我正在尝试了解存储这些上传文件的最佳方式。
从相关问题中,我看到有人建议给文件一个服务器生成的unqiue id,然后创建一个将id映射到原始文件名的数据库表。
从安全性,效率或任何其他角度来看,这是存储用户上传文件的最佳方法吗?我应该为每个文件存储什么样的信息?
接受用户上传的文件是否还有其他最佳做法? (显然,除了确保它们真的是图像并检查它们的大小)?
修改:了解我需要的更多信息。我正在谈论用户需要上传并嵌入他们创建的内容的图像文件。想象它就像StackOverflow的答案(或博客文章):有人上传了一张图片,只要有人看到答案,就必须存储和显示。
谢谢,
鹅蛋
注意:有几个相关的问题,但我没有找到一个要求比较存储用户上传文件的方法。
答案 0 :(得分:3)
你的问题太宽泛而无法提供帮助;最佳方法取决于您的具体要求。尽管如此...
程序员总是试图将文件压缩到数据库中。抗。它只是为你之后尝试做的所有事情增加了一层复杂性。
根据我的经验,虽然使用hashkey作为本地文件名是我的偏好,但它并没有真正解决,因为我们的文件并不局限于图像:非图像需要一个文件名来回馈给用户,并且上传者并不特别喜欢让他们的文件从根本上重命名,因为它使他们无法知道什么文件是什么。
至于图像,在重新缩放到各种尺寸/缩略图时,有一些非常重要的工作要做。
答案 1 :(得分:2)
这是一个很大的问题。
与您的图片用例相关,这是图片服务器的域,通常是应用程序的完全独立部分。它们处理图像的生命周期和大小调整(一张图片存储/调整大小到不同的大小)。据我所知,这种情况从未由SQL的BLOB列实现,而是由磁盘上的直接普通文件实现。
另请查看(infrastructure example from facebook)
通常,产品必须符合您的具体要求(文件大小,文件数量,负载)。在大多数情况下,你真的不想从头开始构建所有这些东西......虽然如果你的需求是低端的(只有少数用户很少上传文件),你可以将这些文件保存在磁盘上并保存路径作为参考您的其他数据(例如RDBMS中的列)。