有没有办法在数据库中读出BLOB类型的字段只有几个字节(对于这个问题,没关系的DB品牌),并确定如果二进制内容的图像(假设它是下列之一:JPG, GIF,PNG)? 我有一个在数据库中存储文件的web应用程序,如果它是一个形象,我想显示缩略图,否则我要显示一个图标...但我没有存储任何地方的任何斑点MIMETYPE信息(这不是我的设计)......因为它是一个Web应用程序,图像的加载需要从写出来的<img>标签在一个单独的呼叫(getImage.ashx)发生..当我写出来我不希望标签具有读取整个BLOB到库,确定它是否是一个图像,调整其大小...等等...我希望能够看看前几个字节,知道我是否需要写标签与否。 我不明白的图像文件的结构/格式不够好,知道是否有某种的,我可以读入,以判断它是一个JPG,GIF,PNG或前几个字节标准头的。
说得通?
如果你想帮助我明确(而不是通常回答是否可以做到),那么我使用.NET C#和SQL 2005
谢谢!
PNG图像开始:89 50 4E 47 0D 0A 0A 1A; 看到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 FF D8 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/
这是把它回老同学(用于数据访问的策略)。 总之,您可以使用DataReader抢领域和流的效果,那么就看看杉杉8个字节,看你面对什么样的形象用。
请参阅这篇文章上的介绍如何一个StreamReader附加到DataReader的 。
说了这么多,我可能只是得到的所有字节,除非图像是极大的相,这主要是因为你从检查头获得任何速度可能浸入井的第二遍的时候会丢失。
另一个策略可能是创建来检查该字段和暴露的类型,基于所述第一标题字节,在SQL的图。 样的丑陋,但在紧要关头的作品。