asp如何显示存储在数据库BLOB字段中的图像?
时间:2010-06-08 09:31:00
如何显示存储在BLOB字段中的图像?
showimges.asp
' 在浏览器上单独显示图像
<%@ LANGUAGE=″VBSCRIPT″ %>
<%
Response.Expires = 0
Response.Buffer = TRUE
Response.Clear
' 清除已经存在的HTTP header信息
Response.ContentType = "image/gif"
' 将HTTP header置为image/gif,表示传送的将是图像信息
Set cn = Server.CreateObject(″ADODB.Connection″)
' 根据指定的数据源名(myDSN)将数据取出
cn.Open "DSN=myDSN;UID=sa;PWD=;DATABASE=pubs"
Set rs = cn.Execute("SELECT photo FROM people WHERE id='3302'″)
Response.BinaryWrite rs("photo")
Response.End
%>
我将上面的代码加入到IMAGE标记中,以实现将图像从SQL Server取出并插入到合适的HTML或ASP页面中:
showimges.htm
<HTML>
<HEAD>
<TITLE>asp教程之图像显示 - aspxhome.com</TITLE>
</HEAD>
<BODY>
<IMG SRC="showimges.asp">
</BODY>
</HTML>
可为什么有些时候图像不能正确显示,而有些时候就能显示呢?
这种情况我想可能会发生在直接用MS Access 或 MS Visual FoxPro作为图像数据输入工具时遇到。其根本原因正如你在问题的开始说的,“从SQL Server的BLOB字段Photo中取出.GIF图像的二进制数据,构造出一个HTTP Header……”,问题就在这里:
在ASP中,认为从BLOB字段中取出的图像数据是原始的.GIF或.JPEG格式的二进制数据流,而浏览器也认做在HTTP Header之后所得到的数据是原始的.GIF或.JPEG格式的二进制数据流。这时,如果在BLOB字段中再包含有其它的信息的话,那么这个图像就不能正确显示出来。因为,在作为图像数据输入工具时,在存储图像数据的同时,会在实际的图像数据之前加上OLE信息,然后再一起存放到BLOB字段中。
当然,我们用这个显示图像的办法,也可以举一反三,处理存放在 BLOB字段中其它的二进制数据,如:只要将Response.ContentType设置为“application/msword”,告诉浏览器数据的类型,就可以将存放在BLOB字段中的Word文档在用户端的浏览器中显示出来。