architecture - 为多个用户存储图像

标签 architecture web-applications image storage

平台实际上并不像理论那么重要。根据记录,它是 ASP.NET(3.5 SP1 上的 C#)、SQL Server 2005。为了便于论证,我有无限的空间(文件系统和数据库)和无限的带宽。

我正在开发一个项目,该项目允许多个用户上传自己的图像,这些图像可以由该用户管理并由所有用户查看。我正在尝试确定最好的存储机制是什么。我的想法是,我希望避免将它们直接存储在数据库中,尽管我可以看到存储有关图像的信息。

我看到的是用户会上传图像。服务器将为图像创建一个唯一的名称,将其存储到文件系统,并将有关该图像的关系数据存储在数据库中(即上传时间、与用户的关联、对标题的引用等)。将这些内容保存在磁盘上是 future 迁移到 CDN 的第一步。

有人使用过这样的方法或者可以推荐不同的方法吗?是否应该有某种文件夹结构,例如每个用户的文件夹以帮助文件访问时间?

如有任何反馈,我们将不胜感激!

最佳答案

我同意将图像/文件存储在文件系统而不是数据库上是一个好方法。

关于文件访问时间,您可能需要检查您使用的文件系统在目录包含大量文件时的行为方式。如果列表很大,某些文件系统的性能可能会下降。如果是这样,您可能想创建一些文件夹结构,例如从 00-FF,这可能有几个级别,具体取决于您期望的文件量。然后你可以例如使用某些字段(如文件名)的 MD5 哈希值将其排序到正确的目录中(例如哈希值 FABE063E... 进入 FA/BE/文件名)。

如果您不希望文件名被猜测以限制访问,您还可以使用一些哈希甚至随机字符串作为文件名。这样,只有那些知道文件名的用户(例如,通过您提供该文件的链接)才能访问该文件。如果您想迁移到最终无法自己检查权限的 CDN,这一点也可能很重要。

(如果权限并不重要并且 OTOH 想要可猜测的文件名,那么您显然会采取其他方式,可能会使用用户名作为文件夹结构等。)

关于architecture - 为多个用户存储图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/573119/

相关文章:

java - 模块化 Spring 项目的架构

xml - 如何针对 XXE 全局配置 XML 解析器?

javascript - 使用 javascript 加载图像。我的语法哪里错了?

android - BitmapFactory.decodeFile(String imagePath) 即使图像存在也返回 null

Android - 如何制作带有 View 的复杂选项卡式应用程序

c++ - 运行现有应用程序以更改数据库,好主意吗?

python - 用于拉取 html 并完全解除其相对性的脚本。 (单文件离线)

java - 如何让两个域名指向同一个Web应用程序并显示不同的内容?

jquery 检查图像是否有标题属性

c# - 在基类中使用的继承类中创建的对象