曾一度为图片与文字上传至数据库困扰,《化境无组件上传图片2.0》写得很好,但不是完全适合自己。经过认真阅读源代码、修改与测试,将其改为无组件上传多条文字信息与多张图片至数据库。并在iis5+access2000+asp测试通过。现把源代码公布,希望能对那些曾经也被这问题困扰的朋友有所帮助。同时希望各位同道斧正。
声明:《化境无组件上传图片2.0》并非我写的,在此对《化境无组件上传图片2.0》的作者真诚说声:谢谢!
代码如下:
upfile.index —————————————————————————————
<!– 郑 重 声 明
这是免费代码,从《化境无组件上传图片2.0》修改而来,目的只为对这问题有困扰的朋友有所帮助,
并对《化境无组件上传图片2.0》的作者说声:谢谢!本代码在iis5+access2000+asp测试通过
——gztiger
–>
<html>
<head>
<title>化境编程界无组件上传文字与图片至数据库之gztiger解决方案 修改者:gztiger </title>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#ffffff" text="#000000">
<form name="form1" method="post" action="upfile.asp" enctype="multipart/form-data" >
<table border="1" cellspacing="0" cellpadding="0" bordercolorlight="#000000" bordercolordark="#cccccc" width="91" height="23">
<tr>
<td align="left" valign="middle" height="18" width="18"> </td>
<td bgcolor="#cccccc" align="left" valign="middle" height="18" width="67"> 文件上传</td>
</tr>
</table>
<table width="71%" border="1" cellspacing="0" cellpadding="5" align="center" bordercolordark="#cccccc" bordercolorlight="#000000">
<tr bgcolor="#cccccc">
<td height="22" align="left" valign="middle" bgcolor="#cccccc"> 化境编程界文件上传修改版
修改者:<a href="mailto:gztiger@21cn.com">gztiger</a> </td>
</tr>
<tr align="left" valign="middle" bgcolor="#eeeeee">
<td bgcolor="#eeeeee" height="92">
<!–此处可任意添加多个文本与文件框
在upfile.asp中对应添加textn=trim(upload.form("textn")) 、rs("imagedatan")=image_set(n)
回显提交信息就不用说了 ,数据库表中亦要添加相对字段名:)
–>
文本框1:<input type="text" name="text1" value="图片与文本上传测试1" ><br>
文本框2:<input type="text" name="text2" value="图片与文本上传测试2" ><br>
文本框3:<input type="text" name="text3" value="图片与文本上传测试3" ><br>
图象1 :<input type="file" name="image1" style="width:400" value=""><br>
图象2 :<input type="file" name="image2" style="width:400" value=""><br>
图象3 :<input type="file" name="image3" style="width:400" value=""><br>
文本框4:<input type="text" name="text4" value="图片与文本上传测试4" ><br>
文本框5:<input type="text" name="text5" value="图片与文本上传测试5" ><br>
文本框6:<input type="text" name="text6" value="图片与文本上传测试6" ><br>
文本框7:<input type="text" name="text7" value="图片与文本上传测试7" >
</td>
</tr>
<tr align="center" valign="middle" bgcolor="#eeeeee">
<td bgcolor="#eeeeee" height="24"> <input type="submit" name="submit" value="提 交" class="bt">
<input type="reset" name="submit2" value="清 空" class="bt"> </td>
</tr>
</table>
</form>
</body>
</html>
upfile.asp —————————————————————————————–
<%server.scripttimeout=5000%>
<!–#include file="upload_5xsoft.inc"–>
<title>化境编程界文件上传修改版 修改者:gztiger </title>
<%
dim upload,file,formname,formpath,icount
set upload=new upload_5xsoft 建立上传对象
text1=trim(upload.form("text1")) —-获取表单文本框信息(原来代码用for循环)-目的为了说明获取文本框信息的方法
text2=trim(upload.form("text2"))
text3=trim(upload.form("text3"))
text4=trim(upload.form("text4"))
text5=trim(upload.form("text5"))
text6=trim(upload.form("text6"))
text7=trim(upload.form("text7"))
icount=0
n=1
response.write "<br>"
for each formname in upload.objfile ——————列出所有上传了的文件
set file=upload.file(formname) ——————–生成一个文件对象
image_countn=image_countn&","&file.filename ———-把图象名做成数组
if file.filesize>0 then ————————如果 filesize > 0 说明有文件数据
file.saveas server.mappath("img/"&file.filename) ———-保存文件
end if
n=n+1
set file=nothing
next
set upload=nothing ——————————-删除此对象
image_set=split(image_countn,",")———————返回数组
——添加信息到数据库————————————-
connstr="dbq="+server.mappath("database\img_text.mdb")+";defaultdir=;driver={microsoft access driver (*.mdb)};"
set conn=server.createobject("adodb.connection")
conn.open connstr
set rs=server.createobject("adodb.recordset")
sqlstr="select * from imgdata"
rs.open sqlstr,conn,1,3
if not rs.eof then
id=rs("id")+1
else
id=1
end if
rs.addnew
rs("text1")=text1
rs("text2")=text2
rs("text3")=text3
rs("text4")=text4
rs("text5")=text5
rs("text6")=text6
rs("text7")=text7
rs("imagedata1")=image_set(1)
rs("imagedata2")=image_set(2)
rs("imagedata3")=image_set(3)
rs.update
rs.close
set rs=nothing
upload_ok=true
if upload_ok=true then
——-回显提交信息—————————
response.write("您上传的信息如下:"&"<br>")
connstr="dbq="+server.mappath("database\img_text.mdb")+";defaultdir=;driver={microsoft access driver (*.mdb)};"
set conn=server.createobject("adodb.connection")
conn.open connstr
set rs=server.createobject("adodb.recordset")
sqlstr="select * from imgdata order by id desc"
rs.open sqlstr,conn,1,1
%>
文本1:<%=rs("text1")%><br>
文本2:<%=rs("text2")%><br>
文本3:<%=rs("text3")%><br>
文本4:<%=rs("text4")%><br>
文本5:<%=rs("text5")%><br>
文本6:<%=rs("text6")%><br>
文本7:<%=rs("text7")%><br>
<%if rs("imagedata1")<>"" then%>
图象1:<%=rs("imagedata1")%><br>
<img src="img/<%=rs("imagedata1")%>"><br>
<%end if%>
<%if rs("imagedata2")<>"" then%>
图象2:<%=rs("imagedata2")%><br>
<img src="img/<%=rs("imagedata2")%>" ><br>
<%end if%>
<%if rs("imagedata3")<>"" then%>
图象3:<%=rs("imagedata3")%><br>
<img src="img/<%=rs("imagedata3")%>" ><br>
<% end if
rs.close
set rs=nothing
end if
%>
upload_5xsoft.inc ———————————————————————————-
<script runat=server language=vbscript>
dim data_5xsoft
class upload_5xsoft
dim objform,objfile,version
public function form(strform)
strform=lcase(strform)
if not objform.exists(strform) then
form=""
else
form=objform(strform)
end if
end function
public function file(strfile)
strfile=lcase(strfile)
if not objfile.exists(strfile) then
set file=new fileinfo
else
set file=objfile(strfile)
end if
end function
private sub class_initialize
dim requestdata,sstart,vbcrlf,sinfo,iinfostart,iinfoend,tstream,istart,thefile
dim ifilesize,sfilepath,sfiletype,sformvalue,sfilename
dim ifindstart,ifindend
dim iformstart,iformend,sformname
version="化境http上传程序 version 2.0"
set objform=server.createobject("scripting.dictionary")
set objfile=server.createobject("scripting.dictionary")
if request.totalbytes<1 then exit sub
set tstream = server.createobject("adodb.stream")
set data_5xsoft = server.createobject("adodb.stream")
data_5xsoft.type = 1
data_5xsoft.mode =3
data_5xsoft.open
data_5xsoft.write request.binaryread(request.totalbytes)
data_5xsoft.position=0
requestdata =data_5xsoft.read
iformstart = 1
iformend = lenb(requestdata)
vbcrlf = chrb(13) & chrb(10)
sstart = midb(requestdata,1, instrb(iformstart,requestdata,vbcrlf)-1)
istart = lenb (sstart)
iformstart=iformstart+istart+1
while (iformstart + 10) < iformend
iinfoend = instrb(iformstart,requestdata,vbcrlf & vbcrlf)+3
tstream.type = 1
tstream.mode =3
tstream.open
data_5xsoft.position = iformstart
data_5xsoft.copyto tstream,iinfoend-iformstart
tstream.position = 0
tstream.type = 2
tstream.charset ="gb2312"
sinfo = tstream.readtext
tstream.close
取得表单项目名称
iformstart = instrb(iinfoend,requestdata,sstart)
ifindstart = instr(22,sinfo,"name=""",1)+6
ifindend = instr(ifindstart,sinfo,"""",1)
sformname = lcase(mid (sinfo,ifindstart,ifindend-ifindstart))
如果是文件
if instr (45,sinfo,"filename=""",1) > 0 then
set thefile=new fileinfo
取得文件名
ifindstart = instr(ifindend,sinfo,"filename=""",1)+10
ifindend = instr(ifindstart,sinfo,"""",1)
sfilename = mid (sinfo,ifindstart,ifindend-ifindstart)
thefile.filename=getfilename(sfilename)
thefile.filepath=getfilepath(sfilename)
取得文件类型
ifindstart = instr(ifindend,sinfo,"content-type: ",1)+14
ifindend = instr(ifindstart,sinfo,vbcr)
thefile.filetype =mid (sinfo,ifindstart,ifindend-ifindstart)
thefile.filestart =iinfoend
thefile.filesize = iformstart -iinfoend -3
thefile.formname=sformname
if not objfile.exists(sformname) then
objfile.add sformname,thefile
end if
else
如果是表单项目
tstream.type =1
tstream.mode =3
tstream.open
data_5xsoft.position = iinfoend
data_5xsoft.copyto tstream,iformstart-iinfoend-3
tstream.position = 0
tstream.type = 2
tstream.charset ="gb2312"
sformvalue = tstream.readtext
tstream.close
if objform.exists(sformname) then
objform(sformname)=objform(sformname)&", "&sformvalue
else
objform.add sformname,sformvalue
end if
end if
iformstart=iformstart+istart+1
wend
requestdata=""
set tstream =nothing
end sub
private sub class_terminate
if request.totalbytes>0 then
objform.removeall
objfile.removeall
set objform=nothing
set objfile=nothing
data_5xsoft.close
set data_5xsoft =nothing
end if
end sub
private function getfilepath(fullpath)
if fullpath <> "" then
getfilepath = left(fullpath,instrrev(fullpath, "\"))
else
getfilepath = ""
end if
end function
private function getfilename(fullpath)
if fullpath <> "" then
getfilename = mid(fullpath,instrrev(fullpath, "\")+1)
else
getfilename = ""
end if
end function
end class
class fileinfo
dim formname,filename,filepath,filesize,filetype,filestart
private sub class_initialize
filename = ""
filepath = ""
filesize = 0
filestart= 0
formname = ""
filetype = ""
end sub
public function saveas(fullpath)
dim dr,errorchar,i
saveas=true
if trim(fullpath)="" or filestart=0 or filename="" or right(fullpath,1)="/" then exit function
set dr=createobject("adodb.stream")
dr.mode=3
dr.type=1
dr.open
data_5xsoft.position=filestart
data_5xsoft.copyto dr,filesize
dr.savetofile fullpath,2
dr.close
set dr=nothing
saveas=false
end function
end class
</script>
————————————————-
数据库名:img_text
表:imgdata
字段名 类型
id 自动编号
imagedata1 文本
imagedata2 文本
imagedata3 文本
text1 文本
text2 文本
text3 文本
text4 文本
text5 文本
text6 文本
text7 文本
————————————————-
还要新建一空的文件夹img存放图片.
————————————————–
以上是全部代码,希望能对大家有所帮助.