upfile1_class.asp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <%if session("adminxxx")="" then
  2. response.Redirect("../login.html")
  3. end if%>
  4. <%
  5. Dim oUpFileStream
  6. Class UpFile_Class
  7. Dim Form,File,Version,Err
  8. Private Sub Class_Initialize
  9. Version = "无惧上传类 Version V1.2"
  10. Err = -1
  11. End Sub
  12. Private Sub Class_Terminate
  13. '清除变量及对像
  14. If Err < 0 Then
  15. Form.RemoveAll
  16. Set Form = Nothing
  17. File.RemoveAll
  18. Set File = Nothing
  19. oUpFileStream.Close
  20. Set oUpFileStream = Nothing
  21. End If
  22. End Sub
  23. Public Sub GetData (MaxSize)
  24. '定义变量
  25. Dim RequestBinData,sSpace,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfo
  26. Dim iFileSize,sFilePath,sFileType,sFormValue,sFileName
  27. Dim iFindStart,iFindEnd
  28. Dim iFormStart,iFormEnd,sFormName
  29. '代码开始
  30. If Request.TotalBytes < 1 Then '如果没有数据上传
  31. Err = 1
  32. Exit Sub
  33. End If
  34. If MaxSize > 0 Then '如果限制大小
  35. If Request.TotalBytes > MaxSize Then
  36. Err = 2 '如果上传的数据超出限制
  37. Exit Sub
  38. End If
  39. End If
  40. Set Form = Server.CreateObject ("Scripting.Dictionary")
  41. Form.CompareMode = 1
  42. Set File = Server.CreateObject ("Scripting.Dictionary")
  43. File.CompareMode = 1
  44. Set tStream = Server.CreateObject ("ADODB.Stream")
  45. Set oUpFileStream = Server.CreateObject ("ADODB.Stream")
  46. oUpFileStream.Type = 1
  47. oUpFileStream.Mode = 3
  48. oUpFileStream.Open
  49. oUpFileStream.Write Request.BinaryRead (Request.TotalBytes)
  50. oUpFileStream.Position = 0
  51. RequestBinData = oUpFileStream.Read
  52. iFormEnd = oUpFileStream.Size
  53. bCrLf = ChrB (13) & ChrB (10)
  54. '取得每个项目之间的分隔符
  55. sSpace = MidB (RequestBinData,1, InStrB (1,RequestBinData,bCrLf)-1)
  56. iStart = LenB (sSpace)
  57. iFormStart = iStart+2
  58. '分解项目
  59. Do
  60. iInfoEnd = InStrB (iFormStart,RequestBinData,bCrLf & bCrLf)+3
  61. tStream.Type = 1
  62. tStream.Mode = 3
  63. tStream.Open
  64. oUpFileStream.Position = iFormStart
  65. oUpFileStream.CopyTo tStream,iInfoEnd-iFormStart
  66. tStream.Position = 0
  67. tStream.Type = 2
  68. tStream.CharSet = "gb2312"
  69. sInfo = tStream.ReadText
  70. '取得表单项目名称
  71. iFormStart = InStrB (iInfoEnd,RequestBinData,sSpace)-1
  72. iFindStart = InStr (22,sInfo,"name=""",1)+6
  73. iFindEnd = InStr (iFindStart,sInfo,"""",1)
  74. sFormName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
  75. '如果是文件
  76. If InStr (45,sInfo,"filename=""",1) > 0 Then
  77. Set oFileInfo = new FileInfo_Class
  78. '取得文件属性
  79. iFindStart = InStr (iFindEnd,sInfo,"filename=""",1)+10
  80. iFindEnd = InStr (iFindStart,sInfo,"""",1)
  81. sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
  82. oFileInfo.FileName = Mid (sFileName,InStrRev (sFileName, "\")+1)
  83. oFileInfo.FilePath = Left (sFileName,InStrRev (sFileName, "\"))
  84. oFileInfo.FileExt = Mid (sFileName,InStrRev (sFileName, ".")+1)
  85. iFindStart = InStr (iFindEnd,sInfo,"Content-Type: ",1)+14
  86. iFindEnd = InStr (iFindStart,sInfo,vbCr)
  87. oFileInfo.FileType = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
  88. oFileInfo.FileStart = iInfoEnd
  89. oFileInfo.FileSize = iFormStart -iInfoEnd -2
  90. oFileInfo.FormName = sFormName
  91. file.add sFormName,oFileInfo
  92. else
  93. '如果是表单项目
  94. tStream.Close
  95. tStream.Type = 1
  96. tStream.Mode = 3
  97. tStream.Open
  98. oUpFileStream.Position = iInfoEnd
  99. oUpFileStream.CopyTo tStream,iFormStart-iInfoEnd-2
  100. tStream.Position = 0
  101. tStream.Type = 2
  102. tStream.CharSet = "gb2312"
  103. sFormValue = tStream.ReadText
  104. If Form.Exists (sFormName) Then
  105. Form (sFormName) = Form (sFormName) & ", " & sFormValue
  106. else
  107. form.Add sFormName,sFormValue
  108. End If
  109. End If
  110. tStream.Close
  111. iFormStart = iFormStart+iStart+2
  112. '如果到文件尾了就退出
  113. Loop Until (iFormStart+2) >= iFormEnd
  114. RequestBinData = ""
  115. Set tStream = Nothing
  116. End Sub
  117. End Class
  118. '----------------------------------------------------------------------------------------------------
  119. '文件属性类
  120. Class FileInfo_Class
  121. Dim FormName,FileName,FilePath,FileSize,FileType,FileStart,FileExt
  122. '保存文件方法
  123. Public Function SaveToFile (Path)
  124. On Error Resume Next
  125. Dim oFileStream
  126. Set oFileStream = CreateObject ("ADODB.Stream")
  127. oFileStream.Type = 1
  128. oFileStream.Mode = 3
  129. oFileStream.Open
  130. oUpFileStream.Position = FileStart
  131. oUpFileStream.CopyTo oFileStream,FileSize
  132. oFileStream.SaveToFile Path,2
  133. oFileStream.Close
  134. Set oFileStream = Nothing
  135. End Function
  136. '取得文件数据
  137. Public Function FileData
  138. oUpFileStream.Position = FileStart
  139. FileData = oUpFileStream.Read (FileSize)
  140. End Function
  141. End Class
  142. %>