确定 blob 是否是图像而不加载整个字段?
-
12-09-2019 - |
题
有没有办法从数据库中的 BLOB 类型字段中仅读取几个字节(对于这个问题,数据库品牌并不重要)并确定二进制内容是否是图像(假设它是以下之一:JPG、GIF、PNG)?我有一个将文件存储在数据库中的网络应用程序,如果它是图像,我想显示缩略图,否则我想显示图标......但我没有在其他地方存储该 blob 的任何 MIMETYPE 信息(这不是我的设计)...因为它是一个 Web 应用程序,所以图像的加载需要在单独的调用 (getImage.ashx) 中进行,而不是写出 <img> 标记。当我写出标签时,我不想将整个 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
其他提示
JPEG
文件开头为FF D8 FF
GIF
文件开头为GIF89a
(47 49 46 38 39
)
这是把它回旧学校(用于数据访问的策略)。总之,您可以使用DataReader抢领域和流的效果,那么就看看杉杉8个字节,看你面对的是什么样的形象。
请参阅这篇文章的介绍上如何一个StreamReader连接到您的DataReader 。
所有这一切说,我可能只是得到的所有字节,除非图像是极大的相,这主要是因为你从检查头获得任何速度可能浸入井的第二遍的时候会丢失。
另一个策略可能是创建来检查该字段和暴露的类型,基于所述第一标题字节,在SQL的图。样的丑陋但在捏工作。