确定blob是否是一个没有加载整个字段的图像?

时间:2009-08-11 15:25:42

标签: .net database binary-data

有没有办法从数据库中的BLOB类型字段中读取几个字节(对于这个问题,与DB品牌无关)并确定二进制内容是否是图像(假设它是一个:JPG,GIF,PNG)?我有一个webapp存储数据库中的文件,如果它是一个图像,我想显示一个缩略图,否则我想显示一个图标...但我没有任何MIMETYPE信息存储在blob的任何其他地方(这不是我的设计)...因为它是一个webapp,图像的加载需要在单独的调用(getImage.ashx)中写出< img>标签..当我写出标签时,我不想将整个blob读入库中,确定它是图像,调整大小......等等...我想要能够查看前几个字节并知道我是否需要写标签。我不太了解图像文件结构/格式,以便知道在我可以读入的前几个字节中是否存在某种标准标头,以告知它是JPG,GIF还是PNG。

有意义吗?

如果你想特别帮助我(而不是一般地回答它是否可以完成)那么我正在使用.NET C#和SQL 2005

谢谢!

3 个答案:

答案 0 :(得分:4)

PNG起始于:89 50 4E 47 0D 0A 1A 0A ;见http://www.libpng.org/pub/png/spec/1.2/PNG-Structure.html

GIF以47 49 46 38 37 61(GIF87a)或47 49 46 38 39 61(GIF89a)开头 ;见http://www.fileformat.info/format/gif/egff.htm

JPEG以FF D8 FF E0 xx xx 4A 46 49 46 00开始(编辑:添加标题的缺失部分; xx xx是标题长度,以字节为单位);见http://www.obrador.com/essentialjpeg/headerinfo.htm

参考:http://wangrui.wordpress.com/2007/06/19/file-signatures-table/

答案 1 :(得分:1)

  • JPEG个文件以FF D8 FF
  • 开头
  • GIF个文件以GIF89a47 49 46 38 39
  • 开头

答案 2 :(得分:1)

这是将它带回旧学校(用于数据访问策略)。无论如何,您可以使用DataReader来获取字段并传输结果,然后只需查看第8个字节即可查看您正在处理的图像类型。

有关how to attach a streamreader to your datareader的简介,请参阅此文章。

所有这一切,我可能会得到所有的字节,除非图像是巨大的,主要是因为你在检查标题时获得的任何速度可能会在第二次浸入井中时丢失。

另一种策略可能是创建一个视图来检查字段并根据SQL中的第一个字节字节公开类型。有点丑陋,但工作紧张。