天天看點

最快的ASP無元件上傳類(4M隻需10秒)0.96版

<%

'----------------------------------------------------------------------

'轉發時請保留此聲明資訊,這段聲明不并會影響你的速度!

'******************* 無元件上傳類 ********************************

'修改者:梁無懼

'電子郵件:[email protected]

'網站: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

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

oUpFileStream.Position = iInfoEnd

oUpFileStream.CopyTo tStream,iFormStart-iInfoEnd-2

tStream.Charset = "gb2312"

sFormValue = tStream.ReadText

form.Add sFormName,sFormValue

end if

iFormStart = iFormStart+iStart+2

'如果到檔案尾了就退出

loop until (iFormStart+2) = iFormEnd

RequestBinD