|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
一直以来,由于FileSystemObject的局限,所以ASP最大的难题就是文件上传,大多解决法就是安装第三方上传组件。可第三方组件有很多问题,有的组件要注册,有的组件要在表单中加上他的版权信息。还有的就是组件的兼容问题。在网上也流传了很多无组件上传的代码,但都是只能上传文本文件,或是只能将文件上传到数据库中。作者这段时间在研究ASP,发现可以不用第三方组件上传任意类型的文件。就写了这个类,给大家一个方便,整个类放在一个文件:upload_5xsoft.inc 在 Example 目录下还有一个完整的多文件上传示例程序,可以直接使用。 由于《化境无组件上传程序》问题很多,很多网友都发来他们自己的修改版,各有特点。这里,作者采用了网友梁无惧给出的修改版,再作了些修改,解决了原来的已发现的所有问题(详细看说明)。上传速度也有了很大的提高。 upload_5xsoft.inc <SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT> \\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\' \\\' \\\'请保留此信息: 稻香老农制作 \\\' \\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\' dim upfile_5xSoft_Stream Class upload_5xSoft dim Form,File,Version Private Sub Class_Initialize dim iStart,iFileNameStart,iFileNameEnd,iEnd,vbEnter,iFormStart,iFormEnd,theFile dim strDiv,mFormName,mFormValue,mFileName,mFileSize,mFilePath,iDivLen,mStr Version="化境编程界HTTP上传程序 Version 1.0" if Request.TotalBytes<1 then Exit Sub set Form=CreateObject("Scripting.Dictionary") set File=CreateObject("Scripting.Dictionary") set upfile_5xSoft_Stream=CreateObject("Adodb.Stream") upfile_5xSoft_Stream.mode=3 upfile_5xSoft_Stream.type=1 upfile_5xSoft_Stream.open upfile_5xSoft_Stream.write Request.BinaryRead(Request.TotalBytes) vbEnter=Chr(13)&Chr(10) iDivLen=inString(1,vbEnter)+1 strDiv=subString(1,iDivLen) iFormStart=iDivLen iFormEnd=inString(iformStart,strDiv)-1 while iFormStart < iFormEnd iStart=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 then iFileNameEnd=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 then mFileSize=iEnd-iStart-4 else mFileSize=0 end if set theFile=new FileInfo theFile.FileName=getFileName(mFileName) theFile.FilePath=getFilePath(mFileName) theFile.FileSize=mFileSize theFile.FileStart=iStart+4 theFile.FormName=FormName file.add mFormName,theFile else iStart=inString(iEnd+1,vbEnter&vbEnter) iEnd=inString(iStart+4,vbEnter&strDiv) if iEnd>iStart then mFormValue=subString(iStart+4,iEnd-iStart-4) else mFormValue="" end if form.Add mFormName,mFormValue end if iFormStart=iformEnd+iDivLen iFormEnd=inString(iformStart,strDiv)-1 wend End Sub Private Function subString(theStart,theLen) dim i,c,stemp upfile_5xSoft_Stream.Position=theStart-1 stemp="" for i=1 to theLen if upfile_5xSoft_Stream.EOS then Exit for c=ascB(upfile_5xSoft_Stream.Read(1)) If c > 127 Then if upfile_5xSoft_Stream.EOS then Exit for stemp=stemp&Chr(AscW(ChrB(AscB(upfile_5xSoft_Stream.Read(1)))&ChrB(c))) i=i+1 else stemp=stemp&Chr(c) End If Next subString=stemp End function Private Function inString(theStart,varStr) dim i,j,bt,theLen,str InString=0 Str=toByte(varStr) theLen=LenB(Str) for i=theStart to upfile_5xSoft_Stream.Size-theLen if i>upfile_5xSoft_Stream.size then exit Function upfile_5xSoft_Stream.Position=i-1 if AscB(upfile_5xSoft_Stream.Read(1))=AscB(midB(Str,1)) then InString=i for j=2 to theLen if upfile_5xSoft_Stream.EOS then inString=0 Exit for end if if AscB(upfile_5xSoft_Stream.Read(1))<>AscB(MidB(Str,j,1)) then InString=0 Exit For end if next if InString<>0 then Exit Function end if next End Function Private Sub Class_Terminate form.RemoveAll file.RemoveAll set form=nothing set file=nothing upfile_5xSoft_Stream.close set upfile_5xSoft_Stream=nothing 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 Private function toByte(Str) dim i,iCode,c,iLow,iHigh toByte="" For i=1 To Len(Str) c=mid(Str,i,1) iCode =Asc(c) If iCode<0 Then iCode = iCode + 65535 If iCode>255 Then iLow = Left(Hex(Asc(c)),2) iHigh =Right(Hex(Asc(c)),2) toByte = toByte & chrB("&H"&iLow) & chrB("&H"&iHigh) Else toByte = toByte & chrB(AscB(c)) End If Next End function End Class Class FileInfo dim FormName,FileName,FilePath,FileSize,FileStart Private Sub Class_Initialize FileName = "" FilePath = "" FileSize = 0 FileStart= 0 FormName = "" End Sub Public function SaveAs(FullPath) dim dr,ErrorChar,i SaveAs=1 if trim(fullpath)="" or FileSize=0 or FileStart=0 or FileName="" then exit function if FileStart=0 or right(fullpath,1)="/" then exit function set dr=CreateObject("Adodb.Stream") dr.Mode=3 dr.Type=1 dr.Open upfile_5xSoft_Stream.position=FileStart-1 upfile_5xSoft_Stream.copyto dr,FileSize dr.SaveToFile FullPath,2 dr.Close set dr=nothing SaveAs=0 end function End Class </SCRIPT> upfile.asp <%OPTION EXPLICIT%> <!--#include FILE="upload_5xsoft.inc"--> <html> <head> <title>文件上传</title> </head> <body> <br>化境文件上传!<hr size=1 noshadow width=300 align=left><br><br> </body> </html> upfile.htm <html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <style type="text/css"> <!-- td { font-size: 9pt} a { color: #000000; text-decoration: none} a:hover { text-decoration: underline} .tx { height: 16px; width: 30px; border-color: black black #000000; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 1px; border-left-width: 0px; font-size: 9pt; background-color: #eeeeee; color: #0000FF} .bt { font-size: 9pt; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; height: 16px; width: 80px; background-color: #eeeeee; cursor: hand} .tx1 { height: 20px; width: 30px; font-size: 9pt; border: 1px solid; border-color: black black #000000; color: #0000FF} --> </style> </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> <br> <input type="hidden" name="act" value="upload"> <br> <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"> 化境编程界文件上传</td> </tr> <tr align="left" valign="middle" bgcolor="#eeeeee"> <td bgcolor="#eeeeee" height="92"> <script language="javascript"> function setid() { str=\\\'<br>\\\'; if(!window.form1.upcount.value) window.form1.upcount.value=1; for(i=1;i<=window.form1.upcount.value;i++) str+=\\\'文件\\\'+i+\\\':<input type="file" name="file\\\'+i+\\\'" style="width:400" class="tx1"><br><br>\\\'; window.upid.innerHTML=str+\\\'<br>\\\'; } </script> <li> 需要上传的个数 <input type="text" name="upcount" class="tx" value="1"> <input type="button" name="Button" class="bt" onclick="setid();" value="・ 设定 ・"> </li> <br> <br> <li>上传到: <input type="text" name="filepath" class="tx" style="width:350" value=""> </li> </td> </tr> <tr align="center" valign="middle"> <td align="left" id="upid" height="122"> 文件1: <input type="file" name="file1" style="width:400" class="tx1" value=""> </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> <script language="javascript"> setid(); </script> 返回类别: 教程 上一教程: 给文件加密的一种方式 下一教程: ASP中正则表达式的应用-1 您可以阅读与"化境ASP无组件上传"相关的教程: · ASP无组件上传进度条解决方案 · ASP无组件上传图片的基本方式 · 时间、空间性能极优的ASP无组件上传类 · ASP无组件上传带进度条(续) · ASP多表单域无组件文件上传的例子 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |