ASP无组件上传图片的源代码
- 格式:wps
- 大小:14.50 KB
- 文档页数:2
ASP 无组件上传文件在网站设计时,我们经常需要从本地向服务器上传文件,现在有很多ASP上传组件,在本章中介绍了AspUpload组件和LyfUpload组件的使用,知道他们必须在服务器上注册。
本案例将介绍无需任何组件支持的无阻件上传程序,并且能反映出上传的进度,缺点是不支持大文件的上传和安全性不高。
本案例中包括四个文件,filepath用于存放上传的图片,uploadfile.htm用于提交要上传的文件,saveupload.as p为处理用户提交后的页面,upload.asp为库文件存储无阻件上传类和函数。
本案例中主要利用了ASP中的ADODB.Stream对象实现文件的上传。
难点在于理解类和函数的定义,以及对二进制数据流的操作。
(1)新建一个名为filepath的文件夹,本例所有文件夹将存在该文件夹下。
下(2)saveupload.asp文件用于处理uploadfile.htm文件提交过来的数据,该文件用到的函数都存放在包含文件upload.asp中,首先定义充许上传的格式、文件的大(3)下面将要对该文件对提交过来的数据进行验证,如果正确才上传文件。
首先验证文件的大小是否超出了限制。
(4)接下来验证文件的格式是否为我们充许上传的文件格式。
(6)因为Request.BinaryRead方法在一个页面中只能使用一次,所以就放在函数外面读取,在每个函数中都可以使用,下面获取上传的数据。
此时表单信息和文件信息都混合在一起传了过来,其实就是一个长长的二进制字符串。
我们首先就是(7)接下来写一个函数来获取上传的文件的信息,可以将上传的文件保存到指定文件夹中,FormName表示表单中文件选择框的名字,该函数返回一个数组,保存客户端路径、文件名称、文件扩展名、MIME类型、文件大小信息,如果发生错(8)获取完文件的信息,我们就可以对该文件进行保存工作了。
FormName表示表单中文件选择框的名字,SaveFilePath为保存路径,filename为新的文件名,O verWriteFlag表示是否允许覆盖,True表示允许覆盖,False表示不允许覆盖'该函数返回值,0表示发生错误,1表示正常,2表示名字重复,3表示根本没有选择文件。
asp无组件上传文件所谓“无组件上传文件”,就是不使用第三方组件,直接上传文件。
它是非常复杂的,可是为什么本节还要花一定的篇幅讲解呢?原因有二:(1)如果使用别人的服务器,对方可能不允许你安装第三方组件,就必须使用无组件上传;(2)学习无组件上传,就可以对文件上传的原理有深刻了解,有助于大家理解AspUpload等组件到底是怎么工作的,甚至可以动手开发属于自己的文件上传组件。
要掌握无组件上传,其实最为重要的是学会分析客户端传上来的数据,为此将首先在此讲述无组件上传原理,随后会举一些综合示例。
1. 无组件上传原理细心的同学可能已经注意到,不管是用AspUpload组件还是LyfUpload组件,上传表单文件都是一样的。
这也就提醒我们,用户将文件提交到服务器端的时候都是一样的,区别就是服务器端得到数据后,用什么方法来分析得到其中的文件名称、文件大小、文件内容、文件说明等信息。
所谓无组件上传,就是要我们自己来手工获取这些信息。
下面就分步讲解:(1)剖析上传数据的格式要对上传的数据进行分析,就必须知道上传数据的格式。
其实在<form>标记中增加enctype="multipart/form-data"属性后,上传的数据是一个长长的二进制字符串,其中包括了文件浏览框的名称、文件的客户端路径、文件MIME类型、文件内容、文本框(文件说明)的名称、文本框的值等各种信息。
就好比是邮局送到学校来的一个大邮包,其中包含了信件、包裹、汇款单、报刊等各种东西,学校收发室就要将这些东西挑出来送给相应的人。
二进制字符串是无法直接显示在页面上的,如果非要直接显示,将会看到一堆乱码,但是我们可以将二进制字符串先转换为文本字符串,然后再显示到页面上。
以本示例为例,假如客户选择了文件“C:\temp.jpg”,并且填写了文件说明“我的照片”,提交后,将二进制字符串转换为文本字符串,结果如图所示:上传数据格式说明:①首先要强调,提交上来的数据是一个二进制数据,将来我们需要处理的也是二进制数据。
ASP图片上传代码-----------------adm_up.asp-----------------代码如下:<!--#include file="conn.asp"--> '数据库连接文件<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>管理</title><style type="text/css"><!--.STYLE1 {color: #000000}body {margin-left: 0px;margin-top: 0px;margin-right: 0px;margin-bottom: 0px;}--></style><script language="javascript">function checknull(){dm=document.formvar filter=/^\s*[a-zA-Z]{1}:(\\).*[\.][jpgJPGifIF]{3}\s*$/;if (!filter.test(dm.file1.value)){alert('请选择您要上传图片,格式只能上传jpg或gif图片!');dm.file1.focus();return false;}return true;}</script></head><body><table width="100%" border="0" align="left" cellpadding="0" cellspacing="0"><tr><td width="100%" height="26" align="left"><%if session("admupiccnt")="" then%><form action="adm_upc.asp" method="post" enctype="multipart/form-data" name="form" id="form" onsubmit="return checknull()"><input type="hidden" name="act" value="upload" /><input name="file1" type="file" class="wenxints_line" size="32"/><input name="submit" type="submit" value="上传图片" /></form><%else%> <input name="Pic" type="text" value="<%=session("admupiccnt")%>" size="38" readonly/> <%end if%></td></tr></table></body></html>-----------------adm_upc.asp-----------------<!--#include file="conn.asp"--> '数据库连接文件<html><head><meta http-equiv=Content-Type content="text/html;charset=gb2312"><title></title></head>< body><div id="admheader"></div><%dim upfile_5xSoft_StreamdimFilePath,FileMaxSize,FileType,fileweb,nameset,pathset,vfname UpFilePath="../upload/" '上传文件目录FileMaxSize=110000 '文件大小100kbFileType=".jpg.gif" '文件类型fileweb=""nameset =1function makefilename(fname)fname = replace(fname,"-","")fname = replace(fname," ","")fname = replace(fname,":","")fname = replace(fname,"PM","")fname = replace(fname,"AM","")fname = replace(fname,"上午","")fname = replace(fname,"下午","")randomize()makefilename=fname&(int(RND()*10000))end functiondimupload,file,formName,iCount,url,UpFilePath,TypeFlag,fname,File NameStrset upload=new upload_classiCount=0for each formName in upload.file ''列出所有上传了的文件set file=upload.file(formName) ''生成一个文件对象if file.FileSize>0 then ''如果 FileSize > 0 说明有文件数据if FileType<>"" then '如果限制了上传文件类型if Instr(FileType,GetExtendName(file.FileName)) thenTypeFlag = 1 '文件为允许的类型elseTypeFlag = 0 '文件为不允许的类型Response.write "不支持您所上传的文件类型:"Response.write GetExtendName(file.FileName)Response.write "<br>"end ifelseTypeFlag = 1 '没有限制上传文件类型end ifif file.FileSize<FileMaxSize then ''如果未超过文件大小限制if TypeFlag = 1 thenvfname = makefilename(now())if nameset = 1 thenfname = vfname & iCount & "." & GetExtendName(file.FileName)elseif nameset =2 thenfname = file.FileNameelseif nameset = 3 thenfname = vfname & iCount & file.FileNameend iffile.SaveAs Server.mappath(UpFilePath&fname) ''保存文件iCount=iCount+1' fileStr = fileStr & "<a href='"& UpFilePath&file.FileName&"' target='_blank'>查看上传的文件:<font color='red'>" & file.FileName &"</font> ("& file.FileSize &" kb)</a><br>"FileNameStr = UpFilePath&fnamesession("admupiccnt")=fnameend ifelseresponse.write "<center>文件大小超出限制,您最多可以上传100kb的文件"exit forend ifend ifset file=nothingnext'----------------------------------------------------------------------------------------------set upload=nothing ''删除此对象if iCount=0 thenresponse.write "<font color=red>错误!</font> <a href='adm_pc.asp'>返回</a>"response.endend ifsub HtmEnd(Msg)set upload=nothingend subfunction GetExtendName(FileName)dim ExtNameExtName = LCase(FileName)ExtName = right(ExtName,3)ExtName = right(ExtName,3-Instr(ExtName,"."))GetExtendName = ExtNameend functionresponse.write"<script>location.href('adm_pc.asp')</script>"Class upload_classdim Form,File,VersionPrivate Sub Class_InitializedimiStart,iFileNameStart,iFileNameEnd,iEnd,vbEnter,iFormStart,iFor mEnd,theFiledimstrDiv,mFormName,mFormValue,mFileName,mFileSize,mFilePat h,iDivLen,mStrif Request.TotalBytes<1 then Exit Subset Form=CreateObject("Scripting.Dictionary")set File=CreateObject("Scripting.Dictionary")set upfile_5xSoft_Stream=CreateObject("Adodb.Stream") upfile_5xSoft_Stream.mode=3upfile_5xSoft_Stream.type=1upfile_5xSoft_Stream.openupfile_5xSoft_Stream.writeRequest.BinaryRead(Request.T otalBytes)vbEnter=Chr(13)&Chr(10)iDivLen=inString(1,vbEnter)+1strDiv=subString(1,iDivLen)iFormStart=iDivLeniFormEnd=inString(iformStart,strDiv)-1while iFormStart < iFormEndiStart=inString(iFormStart,"name=""")iEnd=inString(iStart+6,"""")mFormName=subString(iStart+6,iEnd-iStart-6)iFileNameStart=inString(iEnd+1,"filename=""")if iFileNameStart>0 and iFileNameStart<iFormEnd theniFileNameEnd=inString(iFileNameStart+10,"""")mFileName=subString(iFileNameStart+10,iFileNameEnd-iFileNameStart-10)iStart=inString(iFileNameEnd+1,vbEnter&vbEnter) iEnd=inString(iStart+4,vbEnter&strDiv)if iEnd>iStart thenmFileSize=iEnd-iStart-4elsemFileSize=0end ifset theFile=new FileInfotheFile.FileName=getFileName(mFileName) theFile.FilePath=getFilePath(mFileName) theFile.FileSize=mFileSizetheFile.FileStart=iStart+4theFile.FormName=FormNamefile.add mFormName,theFileelseiStart=inString(iEnd+1,vbEnter&vbEnter)iEnd=inString(iStart+4,vbEnter&strDiv)if iEnd>iStart thenmFormValue=subString(iStart+4,iEnd-iStart-4) elsemFormValue=""end ifform.Add mFormName,mFormValueend ifiFormStart=iformEnd+iDivLeniFormEnd=inString(iformStart,strDiv)-1wendEnd SubPrivate Function subString(theStart,theLen)dim i,c,stempupfile_5xSoft_Stream.Position=theStart-1stemp=""for i=1 to theLenif upfile_5xSoft_Stream.EOS then Exit forc=ascB(upfile_5xSoft_Stream.Read(1))If c > 127 Thenif upfile_5xSoft_Stream.EOS then Exit forstemp=stemp&Chr(AscW(ChrB(AscB(upfile_5xSoft_Stream.R ead(1)))&ChrB(c)))i=i+1elsestemp=stemp&Chr(c)End IfNextsubString=stempEnd functionPrivate Function inString(theStart,varStr)dim i,j,bt,theLen,strInString=0Str=toByte(varStr)theLen=LenB(Str)for i=theStart to upfile_5xSoft_Stream.Size-theLenif i>upfile_5xSoft_Stream.size then exit Functionupfile_5xSoft_Stream.Position=i-1if AscB(upfile_5xSoft_Stream.Read(1))=AscB(midB(Str,1)) thenInString=ifor j=2 to theLenif upfile_5xSoft_Stream.EOS theninString=0Exit forend ifif AscB(upfile_5xSoft_Stream.Read(1))<>AscB(MidB(Str,j,1)) thenInString=0Exit Forend ifnextif InString<>0 then Exit Functionend ifnextEnd FunctionPrivate Sub Class_T erminateform.RemoveAllfile.RemoveAllset form=nothingset file=nothingupfile_5xSoft_Stream.closeset upfile_5xSoft_Stream=nothingEnd SubPrivate function GetFilePath(FullPath) '获取文件路径If FullPath <> "" ThenGetFilePath = left(FullPath,InStrRev(FullPath, "\"))ElseGetFilePath = ""End IfEnd functionPrivate function GetFileName(FullPath) '获取文件名If FullPath <> "" ThenGetFileName = mid(FullPath,InStrRev(FullPath, "\")+1)ElseGetFileName = ""End IfEnd functionPrivate function toByte(Str)dim i,iCode,c,iLow,iHightoByte=""For i=1 To Len(Str)c=mid(Str,i,1)iCode =Asc(c)If iCode<0 Then iCode = iCode + 65535If iCode>255 TheniLow = Left(Hex(Asc(c)),2)iHigh =Right(Hex(Asc(c)),2)toByte = toByte & chrB("&H"&iLow) & chrB("&H"&iHigh) ElsetoByte = toByte & chrB(AscB(c))End IfNextEnd functionEnd ClassClass FileInfodim FormName,FileName,FilePath,FileSize,FileStart Private Sub Class_InitializeFileName = ""FilePath = ""FileSize = 0FileStart= 0FormName = ""End SubPublic function SaveAs(FullPath)dim dr,ErrorChar,iSaveAs=1if trim(fullpath)="" or FileSize=0 or FileStart=0 or FileName="" then exit functionif FileStart=0 or right(fullpath,1)="/" then exit functionset dr=CreateObject("Adodb.Stream")dr.Mode=3dr.Type=1dr.Openupfile_5xSoft_Stream.position=FileStart-1upfile_5xSoft_Stream.copyto dr,FileSizedr.SaveToFile FullPath,2dr.Closeset dr=nothingSaveAs=0end functionEnd Class%>另附:页面中嵌入上传页代码<iframe src="adm_pc.asp" frameborder="0" scrolling="No" width="400" height="24"></iframe>。
在无组件的情况下,如何上传图片?详细代码和说明如下,需要说明的是本办法只适用于Internet Explorer4.0以上或Netscape Navigator3.0以上版本(其实这也足够了,现在谁还去用那些低版本的东西?):<html><head><title>闪亮日子</title></head><body><tr><td height="69"><p align="center">精彩春风之无组件上传图片</font></td></tr><tr><td height="9"><form enctype="multipart/form-data" action="upload.asp" method="post">' 请求表单信息的编码类型必须使用enctype="multipart/form-data"<div align="center"><center><p>请选择上传的图片: <br></font><input name="picture" type="file" accept="image/*"><br>' accept将对话框中出现的文件类型限制为图文件<input type="submit" value="现在上传"></p>' 创建上传键</center></div></form></td></tr></table></center></div><p></p></body></html>。
Asp头像上传本例使用的是艾恩无组件上传类。
演示效果如下:由于仅仅是个范例所以没有做太多的美化。
本例实现了上传头像更新显示,需要的朋友可以参考下需要三个文件,一个上传显示页面(pdup.asp),一个弹出上传页面(upload.asp)和一个类页面(UpLoad_Class.inc)。
pdup.asp以下是代码:<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%><!--#include file="conn.asp"--><%'定义一个编辑变量Dim MM_editActionMM_editAction = CStr(Request.ServerVariables("SCRIPT_NAME"))If (Request.QueryString <> "") ThenMM_editAction = MM_editAction & "?" & Server.HTMLEncode(Request.QueryString)End If' boolean to abort record editDim MM_abortEditMM_abortEdit = false%><%If (CStr(Request("MM_insert")) = "upphoto") ThenIf (Not MM_abortEdit) ThenDim MM_editCmdSet MM_editCmd = Server.CreateObject ("mand")MM_editCmd.ActiveConnection = connMM_mandText = "INSERT INTO member (memb_name, memb_header) V ALUES (?, ?)"MM_editCmd.Prepared = trueMM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param1", 202, 1, 50, Request.Form("memb_name")) ' adVarWCharMM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param2", 203, 1, 1073741823, Request.Form("memb_header")) ' adLongVarWCharMM_editCmd.ExecuteMM_editCmd.ActiveConnection.Close'完成更新记录操作重定向URLDim MM_editRedirectUrlMM_editRedirectUrl = "pdup.asp"If (Request.QueryString <> "") ThenIf (InStr(1, MM_editRedirectUrl, "?", vbTextCompare) = 0) ThenMM_editRedirectUrl = MM_editRedirectUrl & "?" & Request.QueryStringElseMM_editRedirectUrl = MM_editRedirectUrl & "&" & Request.QueryStringEnd IfEnd IfResponse.Redirect(MM_editRedirectUrl)End IfEnd If%><!—以上代码是DW生成的插入记录代码--><%set memb=server.createobject("ADODB.recordset")sql="SELECT * FROM member order by id desc"memb.Open sql,conn,1,3memb.pagesize=100 '每页记录数page=Cint(request("page"))if page < 1 then page=1if page > memb.pagecount then page=memb.pagecountmemb.absolutepage=page%><!—以上代码是显示记录的代码--><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>头像上传</title><style>body {font-size:12px; font-family:Arial, Helvetica, sans-serif;}.myinfo{border:1px #ccc solid; margin:50px auto; width:300px; padding:10px;}</style><script type="text/javascript">/*---首页表单验证---*/function check_input() {if (document.upphoto.memb_name.value == '') {alert("请输入用户名!");document.upphoto.memb_name.focus();return false;}if (document.upphoto.memb_header.value == '') {alert("请上传头像!");document.upphoto.memb_header.focus();return false;}return true;}//这里是弹出窗口function showWindow(){window.open("upload.asp","","width=400,height=30");}</script><!----以上代码是判断表单></head><body><div class="myinfo"><form method="post" id="upphoto" name="upphoto" ACTION="<%=MM_editAction%>" onsubmit="return check_input();"><!—这里要写上name,因为在后面会传值--><input type="text" id="memb_name" name="memb_name" /><br /><img name="headview" src="files/0.jpg" width="100px" height="100px" /><input name="memb_header" type="hidden" id="memb_header" value="files/0.jpg" /><br /><input type="button" value ="上传头像" onclick="showWindow();" /><hr /><br /><input name="submit" type="submit" id="submit" value ="保存修改" /><input type="hidden" name="MM_insert" value="upphoto" /></form></div><!--<%for ipage=1 to memb.pagesize%>--><div class="cont" style="border:1px #ccc solid; padding:5px; margin:3px; float:left;"><img src="<%=memb("memb_header")%>" alt="<%=memb("memb_name")%>" title="<%=memb("memb_name")%>" width="50px" height="50px" /></div><!--<%memb.movenextif memb.EOF then exit fornext%>--></body></html>upload.asp代码开始:<!--#include file="upload_class.inc"--><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml" xml:lang="zh-cn" lang="zh-cn"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>示例结果</title><style type="text/css">TABLE {border:1px green solid;margin-top:5px;}TD{border-bottom:1px #dddddd solid;height:20px;padding:3px 0 0 5px;}.head{background-color:#eeeeee;}</style></head><body style="font-size:12px"><form name="upload" method="post" action="upload.asp?act=upload" enctype="multipart/form-data"><input type ="file" name ="file1" /> <input type ="submit" value="上传" /></form><%if request.QueryString("act")="upload" thenDim Upload,path,tempCls,fName'===================================================================== ==========set Upload=new AnUpLoad '创建类实例Upload.SingleSize=1024*1024*1024 '设置单个文件最大上传限制,按字节计;默认为不限制Upload.MaxSize=1024*1024*1024 '设置最大上传限制,按字节计;默认为不限制Upload.Exe="bmp|rar|pdf|jpg|gif" '设置合法扩展名,以|分割,忽略大小写Upload.Charset="gb2312" '设置文本编码,默认为gb2312 Upload.openProcesser=false '禁止进度条功能,如果启用,需配合客户端程序Upload.GetData() '获取并保存数据,必须调用本方法'===================================================================== ==========if Upload.ErrorID>0 then '判断错误号,如果myupload.Err<=0表示正常response.write Upload.Description '如果出现错误,获取错误描述elseif Upload.files(-1).count>0 then '这里判断你是否选择了文件path=server.mappath("files") '文件保存路径(这里是files文件夹)'保存文件(以新文件名保存)set tempCls=Upload.files("file1")tempCls.SaveToFile path,0fName=tempCls.FileNameset tempCls=nothingelseresponse.Write "您没有上传任何文件!"end ifend ifset Upload=nothing '销毁类实例%><script type ="text/javascript">window.opener.document.upphoto.memb_header.value='files/<%=fName%>';window.opener.document.upphoto.headview.src='files/<%=fName%>';window.opener =null;window.close();</script><-- 上面的这段js代码是把文件的值发送到前一页面的相应标签中格式是:document.表单是ID.标签的name名.value='files/<%=fName%>';如果是input表单就写value,如果是图片就写src,类推。
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无组件上传样例</title></head><body><form id="up_file" name="up_file" enctype="multipart/form-data" method="post"><input type="file" name="file" /><input type="text" name="intro" value="地不收" /><input type="submit" name="Submit" value="提交" /></form><%dim file_size,file_datafile_size=request.TotalBytesif file_size<>0 thenfile_data=request.BinaryRead(file_size)'response.Write(file_size)'response.Write(BinaryToString(file_data))dim paremator,markmark=chrb(13)&chrb(10)paremator=leftb(file_data,instrb(file_data,mark)-1)'response.Write(BinaryToString(paremator)&"<p>")dim temp_url,temp_url_start,temp_url_enddim str01,str02,str03,str03_start,str04,str04_startstr01=StringToBinary("Content-Disposition: form-data; name=""")str02=StringToBinary("""; filename=""")str03=paremator&mark&str01str03_start=instrb(file_data,str03)+lenb(str03)temp_url_start=instrb(str03_start,file_data,str02)+lenb(str02)str04=leftb(file_data,temp_url_start)str04_start=instrb(file_data,str04)+lenb(str04)temp_url_end=instrb(str04_start,file_data,mark)-2temp_url=BinaryToString(midb(file_data,temp_url_start,temp_url_end-temp_url_start+1)) response.Write(temp_url&"-客户端路径<p>")dim temp_nametemp_name=mid(temp_url,instrrev(temp_url,"\")+1)response.Write(temp_name&"-客户端文件名<p>")dim content_start,content_end,content_lencontent_start=InstrB(temp_url_start,file_data,mark&mark)+4 '定位到文件内容所在的第1个字符content_end=InstrB(content_start,file_data,paremator)-3 '定位到文件内容的最后一个字符content_len=content_end-content_start+1dim stream01,stream02set stream01=server.CreateObject("adodb.stream")stream01.type=1stream01.openstream01.write file_dataset stream02=server.CreateObject("adodb.stream")stream02.type=1stream02.openstream01.position=content_start-1stream01.copyto stream02,content_lenstream02.savetofile server.MapPath(temp_name),2'------------------------------------------------------------------------------------------------'该函数可以将二进制字符串转换成文本字符串Function BinaryToString(thedata)'变量strNow表示正在处理的字符,strTemp用来保存已经处理完毕的字符串'变量flag是一个标志,False表示前一个字符不是中文,True表示前一个字符是中文Dim strNow,strTemp,flag,Iflag=False'利用循环依次转换每一个字符For I=1 To LenB(thedata)'因为一个中文字符包括两个字节,如果flag=True,表示前一个字符是中文,所以'要跳过该字符,需要令标志flag=False。
asp图片无组件上传与显示(测试过OK,提醒记得新建uploading 文件夹否则提示错误)三个文件(index.asp upload.asp upfile.asp)一个文件夹存放上传图片的文件夹(uploading)一个无组件上传需要的upload_5xsoft.inc1.upload_5xsoft.inc<%dim upfile_5xSoft_StreamClass upload_5xSoftdim Form,File,VersionPrivate Sub Class_Initializedim iStart,iFileNameStart,iFileNameEnd,iEnd,vbEnter,iFormStart,iFormEnd,theFiledim strDiv,mFormName,mFormValue,mFileName,mFileSize,mFilePath,iDivLen,mStr Version="任翔专用上传程序"if Request.TotalBytes<1 then Exit Subset Form=CreateObject("Scripting.Dictionary")set File=CreateObject("Scripting.Dictionary")set upfile_5xSoft_Stream=CreateObject("Adodb.Stream")upfile_5xSoft_Stream.mode=3upfile_5xSoft_Stream.type=1upfile_5xSoft_Stream.openupfile_5xSoft_Stream.write Request.BinaryRead(Request.TotalBytes)vbEnter=Chr(13)&Chr(10)iDivLen=inString(1,vbEnter)+1strDiv=subString(1,iDivLen)iFormStart=iDivLeniFormEnd=inString(iformStart,strDiv)-1while iFormStart < iFormEndiStart=inString(iFormStart,"name=""")iEnd=inString(iStart+6,"""")mFormName=subString(iStart+6,iEnd-iStart-6)iFileNameStart=inString(iEnd+1,"filename=""")if iFileNameStart>0 and iFileNameStart<iFormEnd theniFileNameEnd=inString(iFileNameStart+10,"""")mFileName=subString(iFileNameStart+10,iFileNameEnd-iFileNameStart-10)iStart=inString(iFileNameEnd+1,vbEnter&vbEnter)iEnd=inString(iStart+4,vbEnter&strDiv)if iEnd>iStart thenmFileSize=iEnd-iStart-4elsemFileSize=0end ifset theFile=new FileInfotheFile.FileName=getFileName(mFileName)theFile.FilePath=getFilePath(mFileName)theFile.FileSize=mFileSizetheFile.FileStart=iStart+4theFile.FormName=FormNamefile.add mFormName,theFileelseiStart=inString(iEnd+1,vbEnter&vbEnter)iEnd=inString(iStart+4,vbEnter&strDiv)if iEnd>iStart thenmFormValue=subString(iStart+4,iEnd-iStart-4)elsemFormValue=""end ifform.Add mFormName,mFormValueend ifiFormStart=iformEnd+iDivLeniFormEnd=inString(iformStart,strDiv)-1wendEnd SubPrivate Function subString(theStart,theLen)dim i,c,stempupfile_5xSoft_Stream.Position=theStart-1stemp=""for i=1 to theLenif upfile_5xSoft_Stream.EOS then Exit forc=ascB(upfile_5xSoft_Stream.Read(1))If c > 127 Thenif upfile_5xSoft_Stream.EOS then Exit forstemp=stemp&Chr(AscW(ChrB(AscB(upfile_5xSoft_Stream.Read(1)))&ChrB(c))) i=i+1elsestemp=stemp&Chr(c)End IfNextsubString=stempEnd functionPrivate Function inString(theStart,varStr)dim i,j,bt,theLen,strInString=0Str=toByte(varStr)theLen=LenB(Str)for i=theStart to upfile_5xSoft_Stream.Size-theLenif i>upfile_5xSoft_Stream.size then exit Functionupfile_5xSoft_Stream.Position=i-1if AscB(upfile_5xSoft_Stream.Read(1))=AscB(midB(Str,1)) then InString=ifor j=2 to theLenif upfile_5xSoft_Stream.EOS theninString=0Exit forend ifif AscB(upfile_5xSoft_Stream.Read(1))<>AscB(MidB(Str,j,1)) then InString=0Exit Forend ifnextif InString<>0 then Exit Functionend ifnextEnd FunctionPrivate Sub Class_Terminateform.RemoveAllfile.RemoveAllset form=nothingset file=nothingupfile_5xSoft_Stream.closeset upfile_5xSoft_Stream=nothingEnd SubPrivate function GetFilePath(FullPath)If FullPath <> "" ThenGetFilePath = left(FullPath,InStrRev(FullPath, "\"))ElseGetFilePath = ""End IfEnd functionPrivate function GetFileName(FullPath)If FullPath <> "" ThenGetFileName = mid(FullPath,InStrRev(FullPath, "\")+1)ElseGetFileName = ""End IfEnd functionPrivate function toByte(Str)dim i,iCode,c,iLow,iHightoByte=""For i=1 To Len(Str)c=mid(Str,i,1)iCode =Asc(c)If iCode<0 Then iCode = iCode + 65535If iCode>255 TheniLow = Left(Hex(Asc(c)),2)iHigh =Right(Hex(Asc(c)),2)toByte = toByte & chrB("&H"&iLow) & chrB("&H"&iHigh)ElsetoByte = toByte & chrB(AscB(c))End IfNextEnd functionEnd ClassClass FileInfodim FormName,FileName,FilePath,FileSize,FileStartPrivate Sub Class_InitializeFileName = ""FilePath = ""FileSize = 0FileStart= 0FormName = ""End SubPublic function SaveAs(FullPath)dim dr,ErrorChar,iSaveAs=1if trim(fullpath)="" or FileSize=0 or FileStart=0 or FileName="" then exit function if FileStart=0 or right(fullpath,1)="/" then exit functionset dr=CreateObject("Adodb.Stream")dr.Mode=3dr.Type=1dr.Openupfile_5xSoft_Stream.position=FileStart-1upfile_5xSoft_Stream.copyto dr,FileSizedr.SaveToFile FullPath,2dr.Closeset dr=nothingSaveAs=0end functionEnd Class%>2.index.asp<form name="Form1" method="POST" action="add.asp"><textarea cols="100" name="image" rows="18" width="100%"></textarea></form><iframe border="0" frameBorder="0" noResize scrolling="no" width="100%"src="upload.asp"></iframe>(Textarea 显示图片, iframe显示上传页面upload.asp)3.upload.asp<form name="form" method="post" action="upfile.asp" enctype="multipart/form-data"> <p><input type="hidden" name="filepath" value="uploading"><input type="hidden" name="act" value="upload"><input type="file" name="file1" size=20><input type="submit" class=button name="Submit" value="上传图片"onclick="parent.document.forms[0].Submit.disabled=true"></p><p>类型:gif,jpg,png限制:100K</p></form>( enctype="multipart/form-data"用于表单里有图片上传)4.upfile.asp<!--#include file="upload_5xsoft.inc" --><html><head><title>文件上传</title></head><script>parent.document.forms[0].Submit.disabled=false;</script><%dim upload,file,formName,formPath,iCount,filename,fileExtset upload=new upload_5xSoft ''建立上传对象formPath=upload.form("filepath")''在目录后加(/)if right(formPath,1)<>"/" then formPath=formPath&"/"response.write "<body>"iCount=0for each formName in upload.file ''列出所有上传了的文件set file=upload.file(formName) ''生成一个文件对象if file.filesize<100 thenresponse.write "请选择你要上传的文件[ <a href=# onclick=history.go(-1)>重新上传</a> ]"response.endif file.filesize>100*1000 thenresponse.write "文件大小超过了限制100K[ <a href=# onclick=history.go(-1)>重新上传</a> ]"response.endend iffileExt=lcase(right(file.filename,4))uploadsuc=falseForum_upload="gif,jpg,png"Forumupload=split(Forum_upload,",")for i=0 to ubound(Forumupload)if fileEXT="."&trim(Forumupload(i)) thenuploadsuc=trueexit forelseuploadsuc=falseend ifnextif uploadsuc=false thenresponse.write "文件格式不正确[ <a href=# onclick=history.go(-1)>重新上传</a> ]"response.endend ifrandomizeranNum=int(90000*rnd)+10000filename=formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&secon d(now)&ranNum&fileExtif file.FileSize>0 then ''如果FileSize > 0 说明有文件数据file.SaveAs Server.mappath(FileName) ''保存文件for i=0 to ubound(Forumupload)if fileEXT="."&trim(Forumupload(i)) thenresponse.write "<font color=#FF0000>文件上传成功</font>[ <a href=# onclick=history.go(-1)>继续上传</a>]"exit forend ifstrJS="<SCRIPT language=javascript>" & vbcrlfstrJS=strJS & "var oImg=parent.document.createElement('IMG');"& vbcrlfstrJS=strJS & "oImg.src='" &FileName& "';"& vbcrlfstrJS=strJS & "parent.Form1.image.appendChild(oImg);"& vbcrlfstrJS=strJS & "</script>"response.write strJSnextiCount=iCount+1set file=nothingnextset upload=nothing ''删除此对象response.end%>。
ASP无组件上传图片的源代码
<!--#include file="upload_5xsoft.inc"-->
<%
Set conn=Server.CreateObject("Adodb.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("db.mdb") conn.open connstr
'----------------------------------------
function getextendname(filename)
extname=lcase(filename)
extname=right(extname,3)
extname=right(extname,3-instr(extname,"."))
getextendname=extname
end function
'---------------------------------------------------
'-------------------------------------------------------
function filename()
filename=now()
filename=replace(filename,"-","")
filename=replace(filename,":","")
filename=replace(filename," ","")
filename=filename
end function
'----------------------------------------------------------
'-------------------------------------------------------------------
set upload=new upload_5xsoft
set upfile=upload.file("files")
title=upload.form("t1")
info=upload.form("t2")
if upfile.filesize>0 and upfile.filename<>"" then
if instr("jpg,bmp,gif",getextendname(upfile.filename))>0 then
if upfile.filesize<204800 then
fname=filename&"."&getextendname(upfile.filename)
upfile.saveas server.mappath("pic/"&fname)
sql="insert into img (title,info,imgpath)values('"+ title +"','"+ info +"','"+ fname +"')"
conn.Execute sql
conn.close
response.write "<script>alert('添加图片成功!');top.location.href='index.asp';</script>"
else
response.write "<script language='javascript'> alert('文件上传失败,大小超过了200K!');history.back(); </script>"
end if
else
response.write "<script language='javascript'> alert('文件上传失败,其不为图片格式!');history.back(); </script>"
end if
end if
'--------------------------------------------------------。