回 帖 发 新 帖 刷新版面

主题:[原创]把jpg图片上传到数据库里[access]

参考了不少资料,前段时间自己的系统可以实现上传图片功能了,因为自己在找资料,编写代码的时候走了不少弯路,不希望大家再这样重复找东西了,把自己成功上传的代码贴出来,以勉共享精神,也希望大家帮助我,相互学习.
----------------------------------------------------
upload.asp

<html>
<head>
<title>运维日晚报作业系统</title>
</head>
<body>
<%session("problem_id18")=request("problem_id18")%> '我的系统要求给每条记录增加上传图片功能,这是我自定义的记录唯一id,上个页面传过来的.

   <form enctype="multipart/form-data"  action="trans.asp" method=post>  
    上传图片:(限jpg格式)<input type=file name=mefile>
   <input type=submit name=ok value="上传">  
   </form>  
</body>
</html>

----------------------------------------------------

trans.asp
...连接数据库代码略
<% dim formsize,formdata,bncrlf,divider,datastart,dataend,mydata
'定义上传图片大小,起始位置等变量
formsize=request.totalbytes    '得到form用post方法传过来的总字节数
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)  '得到图片数据流

sql="select * from zhonghebiao where id=" & session("problem_id18")

rs.Open sql,conn,3,2
rs("big").appendchunk mydata    '通过appendchunk方法传送数据到数据库
rs.update
set rs=nothing
set conn=nothing


%>

<img src="images/face.gif">Ok,上传成功!



    </body>
</html>

这样国片就上传成功了,其实不仅出其不限于jpg格式,gif,bmp等都可以通过这个方法上传的,只是我做的显示程序没怎么再用心,只做了显示jpg格式的代码,所以才限于传jpg,大家可以自己改代码达到显示多种格式图片目的的.

----------------------------------------------------
disp.asp


<%

response.expires=0  '怕图形太大,把响应时间设为无限
response.buffer=true '开起缓冲
response.clear
Response.ContentType="image/pjpeg" '这个格式可以自己改,我用的是jpg
rs.open sql,conn,1,1
Response.BinaryWrite rs("big")  '以二进制方式把图形从数据库里读出来
rs.close
set rs=nothing
set conn=nothing
%>


呵呵,完成了,你应该也有自己的上传图片程序了,改进后,肯定比我的厉害多了.
代码虽然很少,但真的费了我不少精力,至少又是半天才调试成功,是不是我太笨了,哈哈.
共享代码,相互提高.^^

回复列表 (共5个回复)

沙发

数据库里,存储图片的字段是选OLE对象?

板凳

读出所有记录图片怎么写?

3 楼

不简单啊
写的很好!
支持楼主,收藏了

4 楼

楼主的代码会有“末字节丢失”bug。

5 楼

divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)
datastart=instrb(formdata,bncrlf & bncrlf)+4   
dataend=instrb(datastart+1,formdata,divider)-datastart 这是什么意思?那两个函数leftB(),instrb()是什么意思?

我来回复

您尚未登录,请登录后再回复。点此登录或注册