实现ASP上传图片至数据库内功能的方法

实现ASP上传图片至数据库内功能的方法

一般的无组件上传类,其上传过程是将图片先保存到指定文件夹,与此同时将该路径保存至数据库字段的。显示图片则是根据数据库表中的路径字段对应显示的。当然有关图片的管理,比如删除:只删除了路径,实际的图片需要根据该路径通过FSO进行删除……

那有没有这样一种情况:将图片直接作为一个字段的值保存。对图片的操作就象是对数据字段的操作一样熟练。答案是肯定的,只是将该字段的类型设为OLE对象

知识点:OLE对象字段用来存储诸如MicrosoftWord或MicrosoftEXCEL文档、图片、声音的数据以及在别的程序中创建的其他类型的二进制数据。OLE对象可以链接或嵌入到MicrosoftAccess表的字段中。

一、设计数据库testimg.mdb

为方便调试,设计表imgurl,其中两个字段:id(自动编号、关键字)、img(OLE对象)

二、连接数据库文件conn.asp



<%
db_path="testimg.mdb"
setconn=server.CreateObject("ADODB.connection")
connstr="driver={MicrosoftAccessDriver(*.mdb)};dbq="&server.MapPath(db_path)
conn.openconnstr
%>



三、提供上传图片的表单页面upload.html



<formaction="upload.asp"method="post"enctype="multipart/form-data">
<inputtype="file"name="imgurl">
<inputtype="submit"name=okvalue="ok">
</form>



四、接受数据并添加记录页upload.asp



<!--#includefile="conn.asp"-->
<%
formsize=request.totalbytes
formdata=request.binaryread(formsize)
bncrlf=chrB(13)&chrB(10)
divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)
datastart=instrb(formdata,bncrlf&bncrlf)+4
dataend=instrb(datastart+1,formdata,divider)-datastart
mydata=midb(formdata,datastart,dataend)
setrs=server.createobject("ADODB.recordset")
rs.open"SELECT*FROMimgurl",conn,3,3
rs.addnew
rs("img").AppendChunkmyData
rs.update
rs.close
setrs=nothing
setconn=nothing
response.redirect"index.asp"
%>



五、提取数据库表中图片字段内容以做显示图片页showimg.asp



<!--#includefile="conn.asp"-->
<%
setrs=server.createobject("ADODB.recordset")
sql="select*fromimgurlwhereid="&trim(request("id"))
rs.opensql,conn,1,1
Response.ContentType="image/*"
Response.BinaryWriters("img").getChunk(8000000)
rs.close
setrs=nothing
setconn=nothing
%>



六、显示图片的index.asp



<!--#includefile="conn.asp"-->
<%
strsql="select*fromimgurl"
setrs=server.createobject("ADODB.recordset")
rs.openstrsql,conn,1,1
dountilrs.eof
whatid=rs("id")
%>
<imgsrc="showimg.asp?id=<%=whatid%>">

<%
rs.movenext
loop%>