ATB Source Codes

Iron ASP upload component-free (An-Upload) v9.7.9 Show UpLoad_Class.inc Source code

Return Download Iron ASP upload component-free (An-Upload) v9.7.9: download UpLoad_Class.inc Source code - Download Iron ASP upload component-free (An-Upload) v9.7.9 Source code - Type:.inc
  1. <%
  2. '=========================================================
  3.  '类名: AnUpLoad(艾恩无组件上传类)
  4.  '作者: Anlige
  5.  '版本: 艾恩无组件上传类V9.2.09
  6.  '开发日期: 2008-4-12
  7.  '修改日期: 2009-4-10
  8.  '作者主页: http://www.ii-home.cn
  9.  'Email: zhanghuiguoanlige@126.com
  10.  'QQ: 417833272
  11. '=========================================================
  12. Dim StreamT
  13. Class AnUpLoad
  14.  Private Form, Fils
  15.  Private vCharSet, vMaxSize, vSingleSize, vErr, vVersion, vTotalSize, vExe, pID,vOP
  16.  
  17. '==============================
  18.  '设置和读取属性开始
  19. '==============================
  20.  Public Property Let MaxSize(ByVal value)
  21.    vMaxSize = value
  22.  End Property
  23.  
  24.  Public Property Let SingleSize(ByVal value)
  25.    vSingleSize = value
  26.  End Property
  27.  
  28.  Public Property Let Exe(ByVal value)
  29.    vExe = LCase(value)
  30.  End Property
  31.  
  32.  Public Property Let CharSet(ByVal value)
  33.    vCharSet = value
  34.  End Property
  35.  
  36.  Public Property Get ErrorID()
  37.    ErrorID = vErr
  38.  End Property
  39.  
  40.  Public Property Get Description()
  41.    Description = GetErr(vErr)
  42.  End Property
  43.  
  44.  Public Property Get Version()
  45.    Version = vVersion
  46.  End Property
  47.  
  48.  Public Property Get TotalSize()
  49.    TotalSize = vTotalSize
  50.  End Property
  51.  
  52.  Public Property Get ProcessID()
  53.    ProcessID = pID
  54.  End Property
  55.  
  56.  Public Property Let openProcesser(ByVal value)
  57.    vOP = value
  58.  End Property
  59. '==============================
  60.  '设置和读取属性结束,初始化类
  61. '==============================
  62.  
  63.  Private Sub Class_Initialize()
  64.    set StreamT=server.createobject("ADODB.STREAM")
  65.    set Form = server.createobject("Scripting.Dictionary")
  66.    set Fils = server.createobject("Scripting.Dictionary")
  67.    vVersion = "艾恩无组件上传类V9.7.9"
  68.    vMaxSize = -1
  69.    vSingleSize = -1
  70.    vErr = -1
  71.    vExe = ""
  72.    vTotalSize = 0
  73.    vCharSet = "gb2312"
  74.    vOP=false
  75.    pID="AnUpload"
  76.    setApp "",0,0,""
  77.  End Sub
  78.  
  79.  Private Sub Class_Terminate()
  80.         Form.Clear()
  81.         Fils.Clear()
  82.         Set Form = Nothing
  83.         Set Fils = Nothing
  84.         Set StreamT = Nothing
  85.  End Sub
  86.  
  87. '==============================
  88.  '函数名:GetData
  89.  '作用:处理客户端提交来的所有数据
  90. '==============================
  91.  Public Sub GetData()
  92.     if vOP then pID=request.querystring("processid")
  93.     Dim value, str, bcrlf, fpos, sSplit, slen, istart
  94.     Dim TotalBytes,BytesRead,ChunkReadSize,PartSize,DataPart,tempdata,formend, formhead, startpos, endpos, formname, FileName, fileExe, valueend, NewName,localname,type_1,contentType
  95.     If checkEntryType = True Then
  96.         vTotalSize = 0
  97.         StreamT.Type = 1
  98.         StreamT.Mode = 3
  99.         StreamT.Open
  100.         TotalBytes = Request.TotalBytes
  101.         BytesRead = 0
  102.         ChunkReadSize = 1024 * 36
  103.         '循环分块读取
  104.         Do While BytesRead < TotalBytes
  105.             '分块读取
  106.             PartSize = ChunkReadSize
  107.             If PartSize + BytesRead > TotalBytes Then PartSize = TotalBytes - BytesRead
  108.             DataPart = Request.BinaryRead(PartSize)
  109.             StreamT.Write DataPart
  110.             BytesRead = BytesRead + PartSize
  111.             setApp "uploading",TotalBytes,BytesRead,""
  112.         Loop
  113.         setApp "uploaded",TotalBytes,BytesRead,""
  114.         StreamT.Position = 0
  115.         tempdata = StreamT.Read
  116.         bcrlf = ChrB(13) & ChrB(10)
  117.         fpos = InStrB(1, tempdata, bcrlf)
  118.         sSplit = MidB(tempdata, 1, fpos - 1)
  119.         slen = LenB(sSplit)
  120.         istart = slen + 2
  121.         Do
  122.             formend = InStrB(istart, tempdata, bcrlf & bcrlf)
  123.             formhead = MidB(tempdata, istart, formend - istart)
  124.             str = Bytes2Str(formhead)
  125.             startpos = InStr(str, "name=""") + 6
  126.             endpos = InStr(startpos, str, """")
  127.             formname = LCase(Mid(str, startpos, endpos - startpos))
  128.             valueend = InStrB(formend + 3, tempdata, sSplit)
  129.             If InStr(str, "filename=""") > 0 Then
  130.                 startpos = InStr(str, "filename=""") + 10
  131.                 endpos = InStr(startpos, str, """")
  132.                 type_1=instr(endpos,lcase(str),"content-type")
  133.                                 contentType=trim(mid(str,type_1+13))
  134.                 FileName = Mid(str, startpos, endpos - startpos)
  135.                 If Trim(FileName) <> "" Then
  136.                     LocalName = FileName
  137.                     FileName = Replace(FileName, "/", "\")
  138.                     FileName = Mid(FileName, InStrRev(FileName, "\") + 1)
  139.                     setApp "processing",TotalBytes,BytesRead,FileName
  140.                     If instr(FileName,".")>0 Then
  141.                                                 fileExe = Split(FileName, ".")(UBound(Split(FileName, ".")))
  142.                                         else
  143.                                                 fileExe = ""
  144.                                         End If
  145.                     If vExe <> "" Then '判断扩展名
  146.                         If checkExe(fileExe) = True Then
  147.                             vErr = 3
  148.                             Exit Sub
  149.                         End If
  150.                     End If
  151.                     NewName = Getname()
  152.                     NewName = NewName & "." & fileExe
  153.                     vTotalSize = vTotalSize + valueend - formend - 6
  154.                     If vSingleSize > 0 And (valueend - formend - 6) > vSingleSize Then '判断上传单个文件大小
  155.                         vErr = 5
  156.                         Exit Sub
  157.                     End If
  158.                     If vMaxSize > 0 And vTotalSize > vMaxSize Then '判断上传数据总大小
  159.                         vErr = 1
  160.                         Exit Sub
  161.                     End If
  162.                     If Fils.Exists(formname) Then
  163.                         vErr = 4
  164.                         Exit Sub
  165.                     Else
  166.                         Dim fileCls:set fileCls=New fileAction
  167.                         fileCls.ContentType=contentType
  168.                         fileCls.Size = (valueend - formend - 6)
  169.                         fileCls.Position = (formend + 3)
  170.                         fileCls.NewName = NewName
  171.                         fileCls.LocalName = FileName
  172.                         Fils.Add formname, fileCls
  173.                         Form.Add formname, LocalName
  174.                         Set fileCls = Nothing
  175.                     End If
  176.                 End If
  177.             Else
  178.                 value = MidB(tempdata, formend + 4, valueend - formend - 6)
  179.                 If Form.Exists(formname) Then
  180.                     Form(formname) = Form(formname) & "," & Bytes2Str(value)
  181.                 Else
  182.                     Form.Add formname, Bytes2Str(value)
  183.                 End If
  184.             End If
  185.             istart = valueend + 2 + slen
  186.         Loop Until (istart + 2) >= LenB(tempdata)
  187.         vErr = 0
  188.    Else
  189.         vErr = 2
  190.    End If
  191.    setApp "processed",TotalBytes,BytesRead,""
  192.    if err then setApp "faild",1,0,err.description
  193.  End Sub
  194.  
  195. Public sub setApp(stp,total,current,desc)
  196.     Application.lock()
  197.     Application(pID)="{ID:""" & pID & """,step:""" & stp & """,total:" & total & ",now:" & current & ",description:""" & desc & """,dt:""" & now() & """}"
  198.     Application.unlock()
  199. end sub
  200. '==============================
  201.  '判断扩展名
  202. '==============================
  203.  Private Function checkExe(ByVal ex)
  204.       Dim notIn: notIn = True
  205.       If vExe="*" then
  206.            notIn=false
  207.       elseIf InStr(1, vExe, "|") > 0 Then
  208.            Dim tempExe: tempExe = Split(vExe, "|")
  209.            Dim I: I = 0
  210.            For I = 0 To UBound(tempExe)
  211.                  If LCase(ex) = tempExe(I) Then
  212.                        notIn = False
  213.                        Exit For
  214.                  End If
  215.            Next
  216.      Else
  217.            If vExe = LCase(ex) Then
  218.                 notIn = False
  219.            End If
  220.      End If
  221.      checkExe = notIn
  222.  End Function
  223.  
  224. '==============================
  225.  '把数字转换为文件大小显示方式
  226. '==============================
  227.  Public Function GetSize(ByVal Size)
  228.     If Size < 1024 Then
  229.        GetSize = FormatNumber(Size, 2) & "B"
  230.     ElseIf Size >= 1024 And Size < 1048576 Then
  231.        GetSize = FormatNumber(Size / 1024, 2) & "KB"
  232.     ElseIf Size >= 1048576 Then
  233.        GetSize = FormatNumber((Size / 1024) / 1024, 2) & "MB"
  234.     End If
  235.  End Function
  236.  
  237. '==============================
  238.  '二进制数据转换为字符
  239. '==============================
  240.  Private Function Bytes2Str(ByVal byt)
  241.     If LenB(byt) = 0 Then
  242.                 Bytes2Str = ""
  243.                 Exit Function
  244.     End If
  245.     Dim mystream, bstr
  246.     Set mystream =server.createobject("ADODB.Stream")
  247.     mystream.Type = 2
  248.     mystream.Mode = 3
  249.     mystream.Open
  250.     mystream.WriteText byt
  251.     mystream.Position = 0
  252.     mystream.CharSet = vCharSet
  253.     mystream.Position = 2
  254.     bstr = mystream.ReadText()
  255.     mystream.Close
  256.     Set mystream = Nothing
  257.     Bytes2Str = bstr
  258.  End Function
  259.  
  260. '==============================
  261.  '获取错误描述
  262. '==============================
  263.  Private Function GetErr(ByVal Num)
  264.     Select Case Num
  265.       Case 0
  266.         GetErr = "数据处理完毕!"
  267.       Case 1
  268.         GetErr = "上传数据超过" & GetSize(vMaxSize) & "限制!可设置MaxSize属性来改变限制!"
  269.       Case 2
  270.         GetErr = "未设置上传表单enctype属性为multipart/form-data或者未设置method属性为Post,上传无效!"
  271.       Case 3
  272.         GetErr = "含有非法扩展名文件!只能上传扩展名为" & Replace(vExe, "|", ",") & "的文件"
  273.       Case 4
  274.         GetErr = "对不起,程序不允许使用相同name属性的文件域!"
  275.       Case 5
  276.         GetErr = "单个文件大小超出" & GetSize(vSingleSize) & "的上传限制!"
  277.     End Select
  278.  End Function
  279.  
  280. '==============================
  281.  '根据日期生成随机文件名
  282. '==============================
  283.  Private Function Getname()
  284.     Dim y, m, d, h, mm, S, r
  285.     Randomize
  286.     y = Year(Now)
  287.     m = Month(Now): If m < 10 Then m = "0" & m
  288.     d = Day(Now): If d < 10 Then d = "0" & d
  289.     h = Hour(Now): If h < 10 Then h = "0" & h
  290.     mm = Minute(Now): If mm < 10 Then mm = "0" & mm
  291.     S = Second(Now): If S < 10 Then S = "0" & S
  292.     r = 0
  293.     r = CInt(Rnd() * 1000)
  294.     If r < 10 Then r = "00" & r
  295.     If r < 100 And r >= 10 Then r = "0" & r
  296.     Getname = y & m & d & h & mm & S & r
  297.  End Function
  298.  
  299. '==============================
  300.  '检测上传类型是否为multipart/form-data
  301. '==============================
  302.  Private Function checkEntryType()
  303.     Dim ContentType, ctArray, bArray,RequestMethod
  304.     RequestMethod=trim(LCase(Request.ServerVariables("REQUEST_METHOD")))
  305.     if RequestMethod="" or RequestMethod<>"post" then
  306.         checkEntryType = False
  307.         exit function
  308.     end if
  309.     ContentType = LCase(Request.ServerVariables("HTTP_CONTENT_TYPE"))
  310.     ctArray = Split(ContentType, ";")
  311.     if ubound(ctarray)>=0 then
  312.         If Trim(ctArray(0)) = "multipart/form-data" Then
  313.             checkEntryType = True
  314.         Else
  315.             checkEntryType = False
  316.         End If
  317.     else
  318.         checkEntryType = False
  319.     end if
  320.  End Function
  321.  
  322. '==============================
  323.  '获取上传表单值,参数可选,如果为-1则返回一个包含所有表单项的一个dictionary对象
  324. '==============================
  325.  Public Function Forms(ByVal formname)
  326.         If trim(formname) = "-1" Then
  327.                 Set Forms = Form
  328.         Else
  329.                 If Form.Exists(LCase(formname)) Then
  330.                         Forms = Form(LCase(formname))
  331.                 Else
  332.                         Forms = ""
  333.                 End If
  334.         End If
  335.  End Function
  336.  
  337. '==============================
  338. '获取上传的文件类,参数可选,如果为-1则返回一个包含所有上传文件类的一个dictionary对象
  339. '==============================
  340.  Public Function Files(ByVal formname)
  341.         If trim(formname) = "-1" Then
  342.                 Set Files = Fils
  343.         Else
  344.                 If Fils.Exists(LCase(formname)) Then
  345.                         Set Files = Fils(LCase(formname))
  346.                 Else
  347.                         Set Files = Nothing
  348.                 End If
  349.         End If
  350.  End Function
  351.  
  352. '==============================
  353. '简便文件保存函数
  354. '==============================
  355. Public Function SaveAs(ByVal formname,ByVal path, ByVal saveType )
  356.         dim vfileAction
  357.         set vfileAction=Files(formname)
  358.         if vfileAction.FileName<>"" then
  359.                 if vfileAction.SaveToFile(path,saveType) then
  360.                         SaveAs=vfileAction.FileName
  361.                 else
  362.                         SaveAs="Has Error!"
  363.                 end if
  364.         end if
  365.         set vfileAction=nothing
  366. end function
  367. End Class
  368.  
  369. '==============================
  370. '文件类,存储文件的详细信息
  371. '==============================
  372. Class fileAction
  373.    Private vSize, vPosition, vName, vNewName, vLocalName, vPath, saveName,vContentType
  374.    '==============================
  375.    '设置属性
  376.    '==============================
  377.    Public Property Let NewName(ByVal value)
  378.           vNewName = value
  379.    End Property
  380.    
  381.    Public Property Get NewName()
  382.           NewName = vNewName
  383.    End Property
  384.    
  385.    Public Property Let ContentType(vData)
  386.           vContentType = vData
  387.    End Property
  388.    Public Property Get ContentType()
  389.           ContentType = vContentType
  390.    End Property
  391.    
  392.    Public Property Let LocalName(ByVal value)
  393.           vLocalName = value
  394.                   vName = value
  395.    End Property
  396.    
  397.    Public Property Get LocalName()
  398.           LocalName = vLocalName
  399.    End Property
  400.  
  401.    Public Property Get FileName()
  402.           FileName = vName
  403.    End Property
  404.  
  405.    Public Property Let Position(ByVal value)
  406.           vPosition = value
  407.    End Property
  408.  
  409.    Public Property Let Size(ByVal value)
  410.           vSize = value
  411.    End Property
  412.    Public Property Get Size()
  413.           Size = vSize
  414.    End Property
  415.    
  416.    '==============================
  417.    '函数名:SaveToFile
  418.    '作用:根据参数保存文件到服务器
  419.    '参数:参数1--文件保存的路径
  420.    '     参数2--文件保存的方式,有两个可选项0表示以新名字(时间+随机数)为文件名保存,1表示以原文件名保存文件
  421.    '==============================
  422.    Public Function SaveToFile(ByVal path, ByVal saveType)
  423.     On Error Resume Next
  424.     Err.Clear
  425.     vPath = Replace(path, "/", "\")
  426.     If Right(vPath, 1) <> "\" Then vPath = vPath & "\"
  427.     CreateFolder vPath
  428.     Dim mystream
  429.     Set mystream =server.createobject("ADODB.Stream")
  430.     mystream.Type = 1
  431.     mystream.Mode = 3
  432.     mystream.Open
  433.     StreamT.Position = vPosition
  434.     StreamT.CopyTo mystream, vSize
  435.     vName = vNewName
  436.     If saveType = 1 Then vName = vLocalName
  437.     mystream.SaveToFile vPath & vName, 2
  438.     mystream.Close
  439.     Set mystream = Nothing
  440.     If Err Then
  441.         SaveToFile = False
  442.     Else
  443.         SaveToFile = True
  444.     End If
  445.    End Function
  446.  
  447.    '==============================
  448.    '函数名:GetBytes
  449.    '作用:获取文件的二进制形式
  450.    '参数:无
  451.    '==============================
  452.         Public Function GetBytes()
  453.                 StreamT.Position = vPosition
  454.                 GetBytes = StreamT.Read(vSize)
  455.         End Function
  456.  
  457.    '==============================
  458.    '函数名:GetBytes
  459.    '作用:获取文件的二进制形式
  460.    '参数:无
  461.    '==============================
  462.  
  463.         Private Function CreateFolder(ByVal FolderPath)
  464.                 Dim FolderArray
  465.                 Dim i
  466.                 Dim DiskName
  467.                 Dim Created
  468.                 Dim FSO : Set FSO = Server.CreateObject("Scripting.FileSystemObject")
  469.                 FolderPath = Replace(FolderPath, "/", "\")
  470.                 If Mid(FolderPath, Len(FolderPath), 1) = "\" Then FolderPath = Mid(FolderPath, 1, Len(FolderPath) - 1)
  471.                 FolderArray = Split(FolderPath, "\")
  472.                 DiskName = FolderArray(0)
  473.                 Created = DiskName
  474.                 For i = 1 To UBound(FolderArray)
  475.                         Created = Created & "\" & FolderArray(i)
  476.                         If Not FSO.FolderExists(Created) Then FSO.CreateFolder Created
  477.                 Next
  478.                 Set FSO = Nothing
  479.         End Function
  480. End Class
  481. %>
downloadUpLoad_Class.inc Source code - Download Iron ASP upload component-free (An-Upload) v9.7.9 Source code
Related Source Codes/Software:
ASP generating static pages source - In the batch build static pages, I do not know the... 40byte
ABC class website source code - A fully functional class and grade website, implem... 1.93KB
AlstraSoft Domain Sponsors Pro v2.1 - &Nbsp;    a foreign business to cre... 1.8KB
ASP certificate query system - User training and certification institutions, onli... 540byte
ASP online weather forecasts (accelerator) - ASP online weather forecasts (accelerator) 192byte
Andy message board 1 - Simple JSP wall.Extract the password: www.... 744byte
Built into the Windows animated cursor -   Established in the Windows animated cursor 28byte
Post this shadow 1 - This guest book is made complete by shadow 20,100,... 588byte
Apple blessed marriage system - Blessed marriage system is a combination of Apple ... 748byte
Match ads click counter v1.0 - Instructions for use:1, if you want to count o... 192byte
China source download System v1.0 - This 3-to beautify the program downloaded by the i... 5.26KB
Ganzhou Windows network - Cover feature:Windows Home | News vertical and... 34.61KB
Strains of strain of beautiful personal home page Build20061004 - -----------Modified part-------------1: added ... 7.7KB
Southwest agricultural information network - Southwest agricultural information network, an agr... 98.89KB
ZWMOBI 3G mobile station system - Powerful business modules, including mobile B2C mo... 3.89KB
As a campus site system v2.0 - For most school,, to built features powerful of ma... 44.88KB
Evening student seating system 7 - Evening student seating system is facilitated the ... 26.4KB
94KK be reluctant network community beautification bate3 (new year Edition) - Kernel KB 94kkBBS Forum, new landscaping, further ... 24.82KB
QQ Flash Word - 1. powerful DIY feature, which is now immeasurably... 67KB
Zoomla! Eall CMS v2.0 - Waves CMS is committed to providing our webmasters... 11.31KB

 Back to top