上传图片的最佳存储位置是SQL数据库还是磁盘文件系统?

172

我正在开发一个应用程序,允许用户将图片上传到服务器。每天预计会有大约20张jpeg格式的图片上传,并且可能不会被编辑/调整大小。(这是另一个问题,在存储之前如何在服务器端调整图像大小。也许有人可以在评论中提供 .NET 的资源)。

  • 将图片作为文件存储在文件系统中,并创建一个带有该图像准确路径的表记录。

  • 或者,使用数据库服务器的“image”或“binary data”数据类型将图像本身存储在表中。

我认为两种方法都有优缺点。 我喜欢a)的原因是我可以轻松地重定位文件并只需更改表项。另一方面,我不喜欢在web服务器上存储业务数据,也不想将web服务器连接到保存业务数据的任何其他数据源(出于安全考虑); 我喜欢b)的原因是所有信息都在一个地方,并且可以通过查询轻松访问。另一方面,数据库很快就会变得非常庞大。外包该数据可能更加困难。


2
我没找到它,它在哪里? - Tobias
6
这里是一个问题链接:https://dev59.com/OnVD5IYBdhLWcg3wXaYd,询问是否应该将图像存储在数据库中。 - jason saldo
可能是重复的问题:将图像存储在数据库中-是还是不是? - Liam
18个回答

3

如果需要自动调整大小,请尝试使用ImageMagick...它被许多主要的开源内容/照片管理系统使用...我相信还有一些 .net 扩展可以使用。


2

出于安全原因,避免因IE的内容嗅探而导致攻击者上传JavaScript在图像文件中,可能会在您网站的上下文中执行。因此,在存储图像之前,您可能需要对它们进行某种转换(如裁剪/调整大小),以防止此类攻击。这个答案有一些其他想法。


2
我们使用A。我会将其放在共享驱动器上(除非您不打算运行多个服务器)。
如果有一天这对您来说无法扩展,那么您可以考虑缓存机制。

2

毫无疑问,绝对是选项A。其他人已经提到,无论数据库是否设计用于处理BLOBs,它们通常都不擅长处理此类数据。相反,文件系统则适用于此类数据。您可以选择使用RAID分区,将图像分散在多个驱动器上,甚至将它们分散在地理位置不同的服务器上。

另一个优点是您的数据库备份/复制将非常庞大。


2

2
很好,我有一个类似的项目,用户上传文件到服务器。在我的看法下,选项a)是最佳解决方案,因为它更加灵活。你需要做的是将图像存储在由子目录分类的受保护文件夹中。管理员必须设置主目录,因为内容不能运行脚本(非常重要),并且(读取、写入)受保护,以防止在http请求中被访问。
希望这能帮助你。

1
根据您的需求,特别是体积、用户和搜索频率而定。但是,对于小型或中型办公室,最好的选择是使用像Apple Photos或Adobe Lighroom这样的应用程序。它们专门用于存储、编目、索引和组织此类资源。但是,对于需要大量存储和高用户数的大型组织,建议实例化一个带有数字资产管理的内容管理平台,例如Nuxeo或Alfresco;两者都提供非常好的资源来管理非常大的数据量,并使用简化的方法检索它们。而且,非常重要的是:这两个平台都有免费(开源)选项。

1

如果它们是不需要编辑的小文件,那么选项B并不是一个坏选择。我更喜欢这种方式,而不是编写逻辑来存储文件并处理疯狂的目录结构问题。在一个目录中有很多文件是不好的,对吧?

如果文件很大或需要经常编辑,特别是来自像Office这样的程序,则选项A是最佳选择。

对于大多数情况而言,这只是个人偏好问题,但如果您选择选项A,请确保目录中没有太多文件。如果您选择选项B,则将带有BLOB数据的表放在自己的数据库和/或文件组中。这将有助于维护,特别是备份/还原。您的常规数据可能相当小,而您的图像数据随着时间的推移将会变得非常庞大。


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