实现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%>