我应该将我的图像存储在数据库或文件夹中吗?

时间:2009-04-03 09:39:02

标签: c# asp.net vb.net image file

  

可能重复:
  Storing Images in DB - Yea or Nay?

您好

目前,我网站上的每家公司都有1张图片,可以添加到他们的个人资料中。 我将该图像保存到数据库中....它的公司徽标。

现在我想让他们添加更多图片。现在我不知道我是否必须将它全部保存在数据库中或保存在文件夹中????

为什么我认为文件夹会更好是因为有很多很好的文章,我可以使用花哨的银色灯光功能,但所有这些都只能满足保存在文件夹中的图像。

由于我不是很好,我很难更改代码来查看数据库,而不是使用文件夹进行图像检索的示例。

我想在我的网站上添加这样的内容(浏览图片)。 关于如何在图像保存在数据库中时如何执行此操作的任何代码示例?我在VB.net中使用ASP.NET。 Click here to view what i am talking about

任何想法的人?

此致 艾蒂安

10 个答案:

答案 0 :(得分:15)

我最近和亲自做过两件事;我更喜欢使用目录方法来存储图像,同时将它们的属性保存在DB中。

主要原因:我有一个客户,我为其建立了一个网站。在网站上;有一个照片库部分,允许用户上传新照片(可以从公共网站浏览)。 由于我的客户在上传之前没有想过优化图像; * .jpg超过1mb。 我确实实现了更新图像的能力(一旦保存到数据库),但它必须一次完成一条记录。

如果在将图像存储到目录中时发生这种情况,则可以将文件保存在本地,进行优化并重新放回服务器。

Here is an example

答案 1 :(得分:13)

我会去找文件夹。如果你的sttorage空间不足(只需将它们移动到另一个磁盘并重新指向),就可以获得更大的灵活性,与其他应用程序(例如Silverlight)相比具有更大的灵活性。我只会将DB用于必须安全的文件。

答案 2 :(得分:5)

对于任何普通网站,您绝对希望将其作为网站应用程序本身的一部分,而不是存储在数据库中。一个网站应该尽可能地自包含以保持其可移植性,并且不向数据库添加往返(即使在缓存中)也只是一件好事。 Web服务器非常擅长提供图像文件。

但是,我个人正在开发一个应用程序,其中图像是动态创建的,并通过第二个管理应用程序提供给网站。显然,这些必须以某种形式进行数据库支持,以保持图像的可维护性和安全性。

长话短说,图像具有商业价值(即它们是内容,它们需要安全性,或者它们是动态的),您将不得不将它们存储在数据库中。如果它们是静态的和微不足道的,那么让网站成为一个网站。

答案 3 :(得分:5)

对此有两点想法:

  1. 使用文件系统。但是要确保你的方案设计得足够好,任何一个文件夹都不会超载图像,这会成为管理的噩梦。例如,您可以使用标识符的第一个或最后一个字母或后续位置表示法将其树形化。您的里程会有所不同,因此请确保该方案符合您的数据集(图像)大小。如果您只管理20张图片,则无需详细说明。

  2. 使用SQL Server 2008.它有一个名为filestream的新数据类型,同时将图像保存到文件系统,但允许您通过标准数据库查询检索它。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/cc949109.aspx

  3. 这些不是唯一的选择,但至少,我建议选项#1,因为你可以通过使用基于文件系统的方案获得更好的性能,而不是存储和读取blob数据库。

答案 4 :(得分:4)

我认为在系统文件夹中保存图像是最好的方法 使用数据库和查询,你知道会导致一些过载,数据库转换通常很重,它可能会给你的服务器带来更多的压力。
通过将文件保存在文件夹中并将URL放入数据库的方式,它更适合您的应用程序加载 但DB的优势在于您可以备份图像。


我的建议:将图像保存在文件夹中。唯一的需要是了解系统I / O操作。

答案 5 :(得分:3)

我通常使用的方法是将图像复制到文件夹并将相对URL保存在数据库中。这种方法的缺点是,如果有人删除了图像,最终会在网页中找不到“图像未找到”,除非每次渲染页面时都要检查。

答案 6 :(得分:3)

AFAIK,flickr.com与文件夹/文件服务器以及存储在db中的引用,元数据等一起使用。见flickr architecture

答案 7 :(得分:2)

我的网站也有同样的问题。我决定使用文件夹实现,因为如果你使用数据库,当你只想备份你应该备份整个数据库的图片时......另一方面你可以保留de目录结构,并做一个简单的备份

将我的朋友分开,最好的问候!

答案 8 :(得分:2)

使用文件夹的优点是,您不需要拥有一个自定义处理程序,可以从数据库中取出这些BLOB并将它们转换为常规流。从不同的位置托管它们也更简单,您将避免数据库服务器的负担。

您必须小心存储路径名。相对路径名称可以更好地用作URL,并允许您在存储它们的位置,服务方式等方面具有一定的灵活性和扩展性。

答案 9 :(得分:2)

我会选择两者。

首先,将每个图像存储为数据库中的BLOB列。通过这样做,您可以放心,图像始终包含在您的数据库备份中(假设您这样做)。

其次,将文件复制到文件夹中。通过这样做,您可以避免每次查询数据库(对于图像文件)。单独存储在文件夹中可能会产生影响,例如

  • 文件由于磁盘损坏而丢失
  • 文件不包含在备份操作中

到目前为止,我们所有的客户项目采用相同的方法,我们遇到了各种问题,但没有上传的文件丢失。 (我们正在谈论> 100GB的上传文件)。

注意,您可能需要查看以下内容:

  1. 确保无论何时更新/替换文件,都要在数据库和文件夹上执行此操作。否则,它将不一致。
  2. 您可能希望有一个单独的表来存储文件的信息。通常,您可能希望存储以下内容:(1)文件名(2)文件类型(3)文件大小/ mime类型
  3. 您可能希望拆分存储数据的表。我们的做法是,一旦表达到2GB,我们就创建另一个表。设计得当,找到合适的桌子应该没有任何问题。
  4. 希望这有帮助。