最快的ASP无组件上传类(4M只需10秒)0.96版

 <%
'----------------------------------------------------------------------
'转发时请保留此声明信息,这段声明不并会影响你的速度!
'******************* 无组件上传类 ********************************
'修改者:梁无惧
'电子邮件:yjlrb@21cn.com
'网站:http://www.25cn.com
'原作者:稻香老农
'原作者网站:http://www.5xsoft.com
'声明:此上传类是在化境编程界发布的无组件上传类的基础上修改的.
'在与化境编程界无组件上传类相比,速度快了将近50倍,当上传4M大小的文件时
'服务器只需要10秒就可以处理完,是目前最快的无组件上传程序,当前版本为0.96
'源代码公开,免费使用,对于商业用途,请与作者联系
'文件属性:例如上传文件为c:/myfile/doc.txt
'FileName 文件名 字符串 "doc.txt"
'FileSize 文件大小 数值 1210
'FileType 文件类型 字符串 "text/plain"
'FileExt 文件扩展名 字符串 "txt"
'FilePath 文件原路径 字符串 "c:/myfile"
'使用时注意事项:
'由于Scripting.Dictionary区分大小写,所以在网页及ASP页的项目名都要相同的大小
'写,如果人习惯用大写或小写,为了防止出错的话,可以把
'sFormName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
'改为
'(小写者)sFormName = LCase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))
'(大写者)sFormName = UCase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))
'**********************************************************************
'----------------------------------------------------------------------
dim oUpFileStream

Class upload_file

dim Form,File,Version

Private Sub Class_Initialize
'定义变量
dim RequestBinDate,sStart,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfo
dim iFileSize,sFilePath,sFileType,sFormValue,sFileName
dim iFindStart,iFindEnd
dim iFormStart,iFormEnd,sFormName
'代码开始
Version="无组件上传类 Version 0.96"
set Form = Server.CreateObject("Scripting.Dictionary")
set File = Server.CreateObject("Scripting.Dictionary")
if Request.TotalBytes < 1 then Exit Sub
set tStream = Server.CreateObject("adodb.stream")
set oUpFileStream = Server.CreateObject("adodb.stream")
oUpFileStream.Type = 1
oUpFileStream.Mode = 3
oUpFileStream.Open
oUpFileStream.Write Request.BinaryRead(Request.TotalBytes)
oUpFileStream.Position=0
RequestBinDate = oUpFileStream.Read
iFormEnd = oUpFileStream.Size
bCrLf = chrB(13) & chrB(10)
'取得每个项目之间的分隔符
sStart = MidB(RequestBinDate,1, InStrB(1,RequestBinDate,bCrLf)-1)
iStart = LenB (sStart)
iFormStart = iStart+2
'分解项目
Do
iInfoEnd = InStrB(iFormStart,RequestBinDate,bCrLf & bCrLf)+3
tStream.Type = 1
tStream.Mode = 3
tStream.Open
oUpFileStream.Position = iFormStart
oUpFileStream.CopyTo tStream,iInfoEnd-iFormStart
tStream.Position = 0
tStream.Type = 2
tStream.Charset ="gb2312"
sInfo = tStream.ReadText
'取得表单项目名称
iFormStart = InStrB(iInfoEnd,RequestBinDate,sStart)-1
iFindStart = InStr(22,sInfo,"name=""",1)+6
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFormName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
'如果是文件
if InStr (45,sInfo,"filename=""",1) > 0 then
set oFileInfo= new FileInfo
'取得文件属性
iFindStart = InStr(iFindEnd,sInfo,"filename=""",1)+10
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
oFileInfo.FileName = GetFileName(sFileName)
oFileInfo.FilePath = GetFilePath(sFileName)
oFileInfo.FileExt = GetFileExt(sFileName)
iFindStart = InStr(iFindEnd,sInfo,"Content-Type: ",1)+14
iFindEnd = InStr(iFindStart,sInfo,vbCr)
oFileInfo.FileType = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
oFileInfo.FileStart = iInfoEnd
oFileInfo.FileSize = iFormStart -iInfoEnd -2
oFileInfo.FormName = sFormName
file.add sFormName,oFileInfo
else
'如果是表单项目
tStream.Close
tStream.Type = 1
tStream.Mode = 3
tStream.Open
oUpFileStream.Position = iInfoEnd
oUpFileStream.CopyTo tStream,iFormStart-iInfoEnd-2
tStream.Position = 0
tStream.Type = 2
tStream.Charset = "gb2312"
sFormValue = tStream.ReadText
form.Add sFormName,sFormValue
end if
tStream.Close
iFormStart = iFormStart+iStart+2
'如果到文件尾了就退出
loop until (iFormStart+2) = iFormEnd
RequestBinD

 

 

<
' ---------------------------------------------------------------------- 
'
转发时请保留此声明信息,这段声明不并会影响你的速度! 
'
******************* 无惧上传类 V1.2 ************************************ 
'
作者:梁无惧 
'
网站:http://www.25cn.com 
'
电子邮件:yjlrb@21cn.com 
'
版权声明:版权所有,源代码公开,各种用途均可免费使用,但是修改后必须把修改后的文件 
'
发送一份给作者.并且保留作者此版权信息 
'
********************************************************************** 
'
---------------------------------------------------------------------- 
Dim  oUpFileStream 
' ---------------------------------------------------------------------- 
'
文件上传类 
Class UpFile_Class 

Dim  Form,File,Version,Err 

Private   Sub  Class_Initialize 
Version 
=   " 无惧上传类 Version V1.2 "  
Err 
=   - 1  
End Sub  

Private   Sub  Class_Terminate 
' 清除变量及对像 
If  Err  <   0   Then  
Form.RemoveAll 
Set  Form  =   Nothing  
File.RemoveAll 
Set  File  =   Nothing  
oUpFileStream.Close 
Set  oUpFileStream  =   Nothing  
End   If  
End Sub  

Public   Sub  GetData (MaxSize) 
' 定义变量 
Dim  RequestBinDate,sSpace,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfo 
Dim  iFileSize,sFilePath,sFileType,sFormValue,sFileName 
Dim  iFindStart,iFindEnd 
Dim  iFormStart,iFormEnd,sFormName 
' 代码开始 
If  Request.TotalBytes  <   1   Then   ' 如果没有数据上传 
Err  =   1  
Exit   Sub  
End   If  
If  MaxSize  >   0   Then   ' 如果限制大小 
If  Request.TotalBytes  >  MaxSize  Then  
Err 
=   2   ' 如果上传的数据超出限制 
Exit   Sub  
End   If  
End   If  
Set  Form  =  Server.CreateObject ( " Scripting.Dictionary "
Form.CompareMode 
=   1  
Set  File  =  Server.CreateObject ( " Scripting.Dictionary "
File.CompareMode 
=   1  
Set  tStream  =  Server.CreateObject ( " ADODB.Stream "
Set  oUpFileStream  =  Server.CreateObject ( " ADODB.Stream "
oUpFileStream.Type 
=   1  
oUpFileStream.Mode 
=   3  
oUpFileStream.Open 
oUpFileStream.Write Request.BinaryRead (Request.TotalBytes) 
oUpFileStream.Position 
=   0  
RequestBinDate 
=  oUpFileStream.Read 
iFormEnd 
=  oUpFileStream.Size 
bCrLf 
=  ChrB ( 13 &  ChrB ( 10
' 取得每个项目之间的分隔符 
sSpace  =  MidB (RequestBinDate, 1 , InStrB ( 1 ,RequestBinDate,bCrLf) - 1
iStart 
=  LenB (sSpace) 
iFormStart 
=  iStart + 2  
' 分解项目 
Do  
iInfoEnd 
=  InStrB (iFormStart,RequestBinDate,bCrLf  &  bCrLf) + 3  
tStream.Type 
=   1  
tStream.Mode 
=   3  
tStream.Open 
oUpFileStream.Position 
=  iFormStart 
oUpFileStream.CopyTo tStream,iInfoEnd
- iFormStart 
tStream.Position 
=   0  
tStream.Type 
=   2  
tStream.CharSet 
=   " gb2312 "  
sInfo 
=  tStream.ReadText 
' 取得表单项目名称 
iFormStart  =  InStrB (iInfoEnd,RequestBinDate,sSpace) - 1  
iFindStart 
=   InStr  ( 22 ,sInfo, " name="" " , 1 ) + 6  
iFindEnd 
=   InStr  (iFindStart,sInfo, " "" " , 1
sFormName 
=   Mid  (sinfo,iFindStart,iFindEnd - iFindStart) 
' 如果是文件 
If   InStr  ( 45 ,sInfo, " filename="" " , 1 >   0   Then  
Set  oFileInfo  =   new  FileInfo_Class 
' 取得文件属性 
iFindStart  =   InStr  (iFindEnd,sInfo, " filename="" " , 1 ) + 10  
iFindEnd 
=   InStr  (iFindStart,sInfo, " "" " , 1
sFileName 
=   Mid  (sinfo,iFindStart,iFindEnd - iFindStart) 
oFileInfo.FileName 
=   Mid  (sFileName, InStrRev  (sFileName,  " " ) + 1
oFileInfo.FilePath 
=   Left  (sFileName, InStrRev  (sFileName,  " " )) 
oFileInfo.FileExt 
=   Mid  (sFileName, InStrRev  (sFileName,  " . " ) + 1
iFindStart 
=   InStr  (iFindEnd,sInfo, " Content-Type:  " , 1 ) + 14  
iFindEnd 
=   InStr  (iFindStart,sInfo,vbCr) 
oFileInfo.FileType 
=   Mid  (sinfo,iFindStart,iFindEnd - iFindStart) 
oFileInfo.FileStart 
=  iInfoEnd 
oFileInfo.FileSize 
=  iFormStart  - iInfoEnd  - 2  
oFileInfo.FormName 
=  sFormName 
file.add sFormName,oFileInfo 
else  
' 如果是表单项目 
tStream.Close 
tStream.Type 
=   1  
tStream.Mode 
=   3  
tStream.Open 
oUpFileStream.Position 
=  iInfoEnd 
oUpFileStream.CopyTo tStream,iFormStart
- iInfoEnd - 2  
tStream.Position 
=   0  
tStream.Type 
=   2  
tStream.CharSet 
=   " gb2312 "  
sFormValue 
=  tStream.ReadText 
If  Form.Exists (sFormName)  Then  
Form (sFormName) 
=  Form (sFormName)  &   " "   &  sFormValue 
else  
form.Add sFormName,sFormValue 
End   If  
End   If  
tStream.Close 
iFormStart 
=  iFormStart + iStart + 2  
' 如果到文件尾了就退出 
Loop  Until (iFormStart + 2 >=  iFormEnd 
RequestBinDate 
=   ""  
Set  tStream  =   Nothing  
End Sub  
End  Class 

' ---------------------------------------------------------------------------------------------------- 
'
文件属性类 
Class FileInfo_Class 
Dim  FormName,FileName,FilePath,FileSize,FileType,FileStart,FileExt 
' 保存文件方法 
Public   Function  SaveToFile (Path) 
On   Error   Resume   Next  
Dim  oFileStream 
Set  oFileStream  =   CreateObject  ( " ADODB.Stream "
oFileStream.Type 
=   1  
oFileStream.Mode 
=   3  
oFileStream.Open 
oUpFileStream.Position 
=  FileStart 
oUpFileStream.CopyTo oFileStream,FileSize 
oFileStream.SaveToFile Path,
2  
oFileStream.Close 
Set  oFileStream  =   Nothing  
End Function  

' 取得文件数据 
Public   Function  FileData 
oUpFileStream.Position 
=  FileStart 
FileData 
=  oUpFileStream.Read (FileSize) 
End Function  

End  Class 
%
>  
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值