我应该将图像存储在数据库还是文件夹中?
可能重复:
在DB中存储图像 – 是或否?
你好
目前,我的网站上的每个公司都有1张照片可以添加到他们的个人资料中。 我将这个图像保存到数据库….它的公司标志。
现在我想让他们添加更多的图片。 现在我不知道我是否必须将其全部保存在数据库中或保存在文件夹中?
为什么我认为文件夹会更好的是因为有这么多漂亮的文章与花式银光有点function,我可以使用,但他们都只是照顾保存在文件夹中的图像。
而且,因为我不是那么好,所以我很难更改代码来查看数据库,而不是使用文件夹进行图像检索的示例。
我想添加这样的东西到我的网站(浏览图片)。 任何代码示例为我如何做到这一点时图像保存在数据库中? 我正在使用VB.net的ASP.NET。 点击这里查看我在说什么
任何想法家伙?
问候Etienne
我最近都是这样做的。 我更喜欢使用目录方法来存储图像,同时保持它们的属性在数据库中。
主要原因:我有客户为我做了一个网站。 有一个照相馆部分,允许他们上传可以从公共场所浏览的新照片。 我的客户没有想到在上传之前优化他们的图片。 所以基本上每个.jpg都超过1MB。 一旦保存到数据库中,我添加了更新图像的function,但一次只能logging一个图像。
如果在将图像存储在目录中时发生同样的事情,则可以将文件保存在本地,优化并放回到服务器上。
这是一个例子
我会去的文件夹。 如果您的存储空间用尽(将它们移动到另一个磁盘并重新定位),则更具灵活性,与其他应用程序(例如Silverlight)相比具有更大的灵活性。 我只能使用DB来保存必须安全的文件。
对于任何正常的网站,你绝对希望这是网站应用程序本身的一部分,而不是存储在数据库中。 一个网站应该尽可能地自我包含,以保持它的便携性,而不是增加往返数据库(即使在caching)只能是一件好事。 Web服务器非常擅长提供图像文件。
但是,我个人正在开发一个应用程序,通过第二个pipe理应用程序dynamic创build图像并将其提供给站点。 显然,这些必须以某种forms的数据库支持,以保持图像的可维护性和安全性。
长话短说,图像具有商业价值(即他们的内容,他们需要安全性,或者他们是dynamic的),你将不得不把它们存储在数据库中。 他们在哪里静态和微不足道让网站成为一个网站。
对此有两点想法:
-
使用文件系统。 但是请确保您的devisescheme足够好,以便任何一个文件夹不会超载图像,并且成为pipe理的噩梦。 例如,您可以使用标识符的首字母或最后一个字母或随后的位置标记进行分组。 您的里程会有所不同,所以请确保该scheme适合您的数据集(图像)大小。 如果只pipe理20个图像,则不需要详细的长度。
-
使用SQL Server 2008.它有一个新的数据types称为文件stream,同时将图像保存到文件系统,但允许您通过标准的数据库查询检索它。 有关更多信息,请参阅http://msdn.microsoft.com/en-us/library/cc949109.aspx 。
这些并不是唯一的select,但至less我会推荐选项#1,因为纯粹的事实是,使用基于文件系统的scheme会获得更好的性能,而不是从数据库中存储和读取blob 。
我认为在系统文件夹中保存图像是最好的方法。
使用数据库和查询你知道会导致一些重载,数据库跨越通常是沉重的,它可以给你的服务器更多的压力。
与您的方式保存图像的文件夹,只是把数据库中的URL它更适合您的应用程序加载。
但是DB的优点是可以备份你的图像。
我的build议:将您的图像保存在文件夹中。 唯一的需要是了解系统I / O操作。
我通常使用的方法是将图像复制到一个文件夹,并将相对的URL保存在数据库中。 这种方法的缺点是,如果有人删除了图像,最终在网页中显示“image not found”,除非您每次检查页面时都进行检查。
我的网站也有同样的问题。 我决定使用文件夹实现,因为如果你使用数据库,当你想备份只有备份整个数据库的图片…另一方面,你可以保持de目录结构,并做一个简单的备份。
分开东西我的朋友,最好的问候!
AFAIK,flickr.com与文件夹/文件服务器以及存储在数据库中的参考,元数据等一起使用。 请参阅flickr架构
使用文件夹的好处是您不需要有一个自定义的处理程序,可以将这些BLOB从数据库中取出并将其转换为常规的数据stream。 从不同位置托pipe它们也会更简单,您将避免数据库服务器的负担。
你必须小心存储path名。 相对path名称可以更好地作为URL使用,并且可以让您在存储它们的位置,服务方式等方面有一定的灵活性和扩展性。
我会去的。
首先,将每个图像作为BLOB列存储在数据库中。 通过这样做,您可以放心,图像始终包含在您的数据库备份中(假设您这么做)。
其次,将文件复制到文件夹中。 通过这样做,您可以避免每次查询数据库(对于映像文件)。 单独存储在文件夹中可能有影响,如
- 文件由于磁盘损坏而丢失
- 文件不包含在备份操作中
到目前为止,我们所有的客户项目都采取相同的方法,我们遇到了各种问题,但没有上传的文件丢失。 (我们正在谈论> 100GB的上传文件)。
请注意,您可能需要查看以下内容:
- 确保文件更新/replace时,在数据库和文件夹上执行。 否则,这将是不一致的。
- 您可能希望有一个单独的表来存储文件的信息。 通常,您可能需要存储以下内容:(1)文件名(2)文件types(3)文件大小/ MIMEtypes
- 您可能需要拆分存储数据的表。 我们的做法是一旦expression到2GB,我们创build另一个表。 devise得当,find合适的桌子应该没有问题。
希望这可以帮助。