<%

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

'轉發時請保留此聲明信息,這段聲明不並會影響你的速度!

'*******************   無懼上傳類 V1.2  ************************************

'作者:梁無懼

'版權聲明:版權所有,源代碼公開,各種用途均可免費使用,但是修改後必須把修改後的文件

'發送一份給作者.並且保留作者此版權信息

'**********************************************************************

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

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 RequestBinData,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

  RequestBinData = oUpFileStream.Read 

  iFormEnd = oUpFileStream.Size

  bCrLf = ChrB (13) & ChrB (10)

  '取得每個項目之間的分隔符

  sSpace = MidB (RequestBinData,1, InStrB (1,RequestBinData,bCrLf)-1)

  iStart = LenB  (sSpace)

  iFormStart = iStart+2

  '分解項目

  Do

    iInfoEnd = InStrB (iFormStart,RequestBinData,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,RequestBinData,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 

  RequestBinData = ""

  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

%>


申明

非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

博文欢迎转载,但请给出原文连接。