2011-02-24 31 views
5

是否可以在MYSQL数据库中存储图像文件(.jpg,.gif等)?或者只是在系统中存储并采用图像的参考路径?数据库中的图像

我使用ASP.NET C#,所以如果你有示例代码,如果你能分享它,那将是非常棒的。

+3

是的,您可以将二进制数据存储在数据库中。被警告 - 这是一场神圣的战争,关于这些数据是否属于那里。 – 2011-02-24 21:17:47

回答

6

是的,您可以将图像文件(和任何其他文件)作为二进制数据存储在数据库中。

在MySQL中,可以使用BLOB data type来实现此目的。

BLOB是一个二进制大对象,可以容纳可变数量的数据。四种BLOB类型是TINYBLOB,BLOB,MEDIUMBLOB和LONGBLOB。这些不同仅在于它们可以容纳的值的最大长度。 [...]

将BLOB值视为二进制字符串(字节字符串)。他们没有字符集,排序和比较基于列值中字节的数值。

+0

要从图像中获取字节,请使用:byte [] b = File.ReadAllBytes(file); – 2011-02-24 21:20:37

+0

存储为blob,http://dev.mysql.com/doc/refman/5.0/en/blob.html。您也可以将图像保存到文件系统并将文件存储在数据库中。 – gnome 2011-02-24 21:22:45

1

您必须从图像中创建一个字节数组并将其存储在数据库中。

public static byte[] ConvertImageToByteArray(Image imageIn) 
{ 
    var ms = new MemoryStream(); 
    imageIn.Save(ms, ImageFormat.Png); 
    return ms.ToArray(); 
} 

将数据转换回的图像:

public static Image ConvertByteArrayToImage(byte[] byteArrayIn) 
{ 
    var ms = new MemoryStream(byteArrayIn); 
    Image returnImage = Image.FromStream(ms); 
    return returnImage; 
} 
1

4GuysFromRolla.com有这一点,我作为参考,当我在写代码直接在数据库中存储二进制数据的文章: http://www.4guysfromrolla.com/articles/120606-1.aspx

我个人觉得将图像存储在文件系统和数据库中的指针要少得多。

+0

糟糕。我没有看到问题的MySQL部分。我不知道这篇文章实际上是多么有用。 – Dave 2011-02-24 21:22:22

4

这里后,这是非常相似的一本之一:Should I store my images in the database or folders?

其次用于存储图像到数据库中的样本: http://www.dotnetcurry.com/ShowArticle.aspx?ID=129&AspxAutoDetectCookieSupport=1

在我看来,这取决于你是否选择存储在图像的数据库或文件夹中。这两种方法都有优点和缺点。

这里从asp.net论坛上简短的注释:

如果你真的将图像存储在数据库中?

大约十年前,我开始的 第一个互联网项目,图像 资料库之一。我们应该向注册用户提供各种尺寸的 图像和分辨率为 的图像。每个图像是 设计为图像集合, 从缩略图到最高 分辨率。可用的最大图像 约为4 MB。存储在存档中的每个图像 占用6MB空间的总计 。

后台数据库未在Microsoft平台上运行 ,但提供了支持BLOB字段的 。没有太多的关于 的辩论,我们决定将 描述和其他目录 信息存储在数据库中,并将 作为单独的文件存储在 下的一个众所周知的路径。我们还在 中存储了数据库足够的信息,用于检索该文件的 软件。 被设计为一个相对较小的 的注册用户,在 应用一直没有露面的可扩展性 问题,并在任何时候都没有任何人对 团队,或任何用户,抱怨 性能。

可这短暂的体验,尤其是 的经历从一个相对老 时代的软件和数据库 技术,被用作 对数据库存储基于文件的存储 的优越性的例子吗?当然不是, ,但在现代DBMS系统如何实现BLOB 字段的行之间阅读,我已经使用这种经验 制定了关于图像存储 和数据库的想法。

总之,你应该考虑将 图像存储在数据库中吗?如果您需要经常编辑图像 ,我建议 将图像作为独立文件 存储在服务器的硬盘上。如果图像的尺寸非常大(例如 示例,数百兆字节),则我建议将图像作为单独的 文件存储在文件系统中。如果您的 图像本质上是只读的,并且 相对静态,并且如果您以千字节为单位测量 的大小,则可以考虑将图像存储在 数据库中。

+0

所以,你说它有可能在两种方式中做出来......很棒......!感谢这... – lock 2011-02-24 21:24:11

0

我的公司目前使用BLOB数据的数据库作为文档和图像,我们试图将其转移到仅存储对服务器上文件的引用。数据库有很多GB,当它应该是20 MB时。我会建议反对BLOB,因为它肯定会减慢数据库。

+0

很棒...!但实际上,我确实怀疑数据库是否可以直接存储图像或者只是存储引用......我的疑问已被清除。感谢您的回答 – lock 2011-02-24 21:56:45