发布于2026-07-22 阅读(0)
扫一扫,手机访问
把图片直接存进数据库,然后再从数据库里读出来显示——这个需求在早期的Web开发中还挺常见的,尤其是用ASP搭配Access的时候。虽然现在更推荐用文件存储+路径记录的方式,但理解这种“二进制流直存”的思路,对处理文件上传、数据绑定和二进制输出都很有帮助。下面直接上干货,分三个步骤走:上传页面、处理页面、显示页面。
先把上传页面搞定。这里的关键是 form 的 enctype 属性必须设为 multipart/form-data,否则浏览器不会把文件数据以二进制方式发送。另外,用 让用户选择文件。来看一个简单的例子:
千花飞舞之图片上传
接下来是处理页面 process.asp。这里需要手动解析浏览器发来的二进制数据——因为ASP自带的 Request.Form 无法直接处理 multipart/form-data 格式。核心思路是:取得整个请求的二进制数据,找到分隔边界,然后从中截取出图片文件的二进制内容。截取之后,用 Recordset 的 AppendChunk 方法把数据写入数据库的 OLE对象 字段(Access中对应“OLE对象”类型)。注意,数据库连接字符串要指向你的 Access 文件(比如 images.mdb)。
<%
response.buffer=true
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)
set connGraph=server.CreateObject("ADODB.connection")
connGraph.ConnectionString="driver={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("images.mdb") & ";uid=;PWD=;"
connGraph.Open
set rec=server.createobject("ADODB.recordset")
rec.Open "select * from [images] where id is null",connGraph,1,3
rec.addnew
rec("img").appendchunk mydata
rec.update
rec.close
set rec=nothing
set connGraph=nothing
%>
最后是显示页面 showimg.asp。这个页面的功能很简单:根据传入的 id 参数,从数据库中读出对应的二进制数据,然后输出到浏览器。有一个很容易被忽略的细节:在输出之前,必须设置 Response.ContentType = "image/*",否则浏览器会把它当成普通文本,显示成乱码。然后使用 Response.BinaryWrite 把数据写出去(注意 getChunk 的参数要足够大,比如 7500000 字节,确保能容纳整张图片)。
<%
set connGraph=server.CreateObject("ADODB.connection")
connGraph.ConnectionString="driver={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("images.mdb") & ";uid=;PWD=;"
connGraph.Open
set rec=server.createobject("ADODB.recordset")
strsql="select img from images where id=" & trim(request("id"))
rec.open strsql,connGraph,1,1
Response.ContentType = "image/*"
Response.BinaryWrite rec("img").getChunk(7500000)
rec.close
set rec=nothing
set connGraph=nothing
%>
整个流程就是这样。实际使用时,你还需要考虑文件大小限制、图片类型校验、错误处理等细节,但核心逻辑都在上面了。对于学习ASP的二进制上传和数据库存储来说,这是一个非常经典的范例。
[1]
上一篇:统计在线人数是实时的吗?
下一篇:如何获知页面上的图象的实际尺寸?
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8