zoukankan      html  css  js  c++  java
  • ASP 無組件上傳類

    <%
    '----------------------------------------------------------------------
    '
    轉發時請保留此聲明信息,這段聲明不並會影響你的速度!
    '
    *******************   無懼上傳類 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 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
    %
    >

    申明

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

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

  • 相关阅读:
    HTTP响应状态码整理
    Python通用爬虫,聚焦爬虫概念理解
    HTTP无状态协议理解
    会话与事务知识点总结
    并发一致性知识点整理
    使用隔离级别read committed隐式解决并发冲突
    多并发笔记整理
    git基本使用
    Docker其他
    Docker Bind Mount 与 Volume
  • 原文地址:https://www.cnblogs.com/Athrun/p/983169.html
Copyright © 2011-2022 走看看