Cls_Upload.asp
上传用户:prospercnc
上传日期:2019-12-08
资源大小:1314k
文件大小:9k
源码类别:

弱点检测代码

开发平台:

ASP/ASPX

  1. <%
  2. '==========================================
  3. '文 件 名:Cls_Upload.asp
  4. '文件用途:上传函数类
  5. '版权所有:方卡在线
  6. '==========================================
  7. Class UpLoadClass
  8. Private p_MaxSize,p_FileType,p_SavePath,p_AutoSave,p_Error
  9. Private objForm,binForm,binItem,strDate,lngTime
  10. Public FormItem,FileItem
  11. Public Property Get Version
  12. Version="Rumor UpLoadClass Version 2.0"
  13. End Property
  14. Public Property Get Error
  15. Error=p_Error
  16. End Property
  17. Public Property Get MaxSize
  18. MaxSize=p_MaxSize
  19. End Property
  20. Public Property Let MaxSize(lngSize)
  21. if isNumeric(lngSize) Then
  22. p_MaxSize=clng(lngSize)
  23. End if
  24. End Property
  25. Public Property Get FileType
  26. FileType=p_FileType
  27. End Property
  28. Public Property Let FileType(strType)
  29. p_FileType=strType
  30. End Property
  31. Public Property Get SavePath
  32. SavePath=p_SavePath
  33. End Property
  34. Public Property Let SavePath(strPath)
  35. p_SavePath=replace(strPath,chr(0),"")
  36. End Property
  37. Public Property Get AutoSave
  38. AutoSave=p_AutoSave
  39. End Property
  40. Public Property Let AutoSave(byVal Flag)
  41. select case Flag
  42. case 0:
  43. case 1:
  44. case 2:
  45. case false:Flag=2
  46. case else:Flag=0
  47. End select
  48. p_AutoSave=Flag
  49. End Property
  50. Private Sub Class_Initialize
  51. p_Error    = -1
  52. p_MaxSize  = 153600
  53. p_FileType = "jpg/gif"
  54. p_SavePath = ""
  55. p_AutoSave = 0
  56. strDate    = replace(cstr(Date()),"-","")
  57. lngTime    = clng(timer()*1000)
  58. Set binForm = Server.CreateObject("ADODB.Stream")
  59. Set binItem = Server.CreateObject("ADODB.Stream")
  60. Set objForm = Server.CreateObject("Scripting.Dictionary")
  61. objForm.CompareMode = 1
  62. End Sub
  63. Private Sub Class_Terminate
  64. objForm.RemoveAll
  65. Set objForm = nothing
  66. Set binItem = nothing
  67. binForm.Close()
  68. Set binForm = nothing
  69. End Sub
  70. Public Sub open()
  71. if p_Error=-1 Then
  72. p_Error=0
  73. else
  74. Exit Sub
  75. End if
  76. Dim lngRequestSize,binRequestData,strFormItem,strFileItem
  77. Const strSplit="'"">"
  78. lngRequestSize=Request.TotalBytes
  79. if lngRequestSize<1 Then
  80. p_Error=4
  81. Exit Sub
  82. End if
  83. binRequestData=Request.BinaryRead(lngRequestSize)
  84. binForm.Type = 1
  85. binForm.open
  86. binForm.Write binRequestData
  87. Dim bCrLf,strSeparator,intSeparator
  88. bCrLf=ChrB(13)&ChrB(10)
  89. intSeparator=InstrB(1,binRequestData,bCrLf)-1
  90. strSeparator=LeftB(binRequestData,intSeparator)
  91. Dim p_start,p_end,strItem,strInam,intTemp,strTemp
  92. Dim strFtyp,strFnam,strFext,lngFsiz
  93. p_start=intSeparator+2
  94. Do
  95. p_end  =InStrB(p_start,binRequestData,bCrLf&bCrLf)+3
  96. binItem.Type=1
  97. binItem.open
  98. binForm.Position=p_start
  99. binForm.CopyTo binItem,p_end-p_start
  100. binItem.Position=0
  101. binItem.Type=2
  102. binItem.Charset="utf-8"
  103. strItem=binItem.ReadText
  104. binItem.Close()
  105. p_start=p_end
  106. p_end  =InStrB(p_start,binRequestData,strSeparator)-1
  107. binItem.Type=1
  108. binItem.open
  109. binForm.Position=p_start
  110. lngFsiz=p_end-p_start-2
  111. binForm.CopyTo binItem,lngFsiz
  112. intTemp=Instr(39,strItem,"""")
  113. strInam=Mid(strItem,39,intTemp-39)
  114. if Instr(intTemp,strItem,"filename=""")<>0 Then
  115. if not objForm.Exists(strInam&"_From") Then
  116. strFileItem=strFileItem&strSplit&strInam
  117. if binItem.Size<>0 Then
  118. intTemp=intTemp+13
  119. strFtyp=Mid(strItem,Instr(intTemp,strItem,"Content-Type: ")+14)
  120. strTemp=Mid(strItem,intTemp,Instr(intTemp,strItem,"""")-intTemp)
  121. intTemp=InstrRev(strTemp,"")
  122. strFnam=Mid(strTemp,intTemp+1)
  123. objForm.Add strInam&"_Type",strFtyp
  124. objForm.Add strInam&"_Name",strFnam
  125. objForm.Add strInam&"_Path",Left(strTemp,intTemp)
  126. objForm.Add strInam&"_Size",lngFsiz
  127. if Instr(strTemp,".")<>0 Then
  128. strFext=Mid(strTemp,InstrRev(strTemp,".")+1)
  129. else
  130. strFext=""
  131. End if
  132. if left(strFtyp,6)="image/" Then
  133. binItem.Position=0
  134. binItem.Type=1
  135. strTemp=binItem.read(10)
  136. if strcomp(strTemp,chrb(255) & chrb(216) & chrb(255) & chrb(224) & chrb(0) & chrb(16) & chrb(74) & chrb(70) & chrb(73) & chrb(70),0)=0 Then
  137. if Lcase(strFext)<>"jpg" Then strFext="jpg"
  138. binItem.Position=3
  139. do while not binItem.EOS
  140. do
  141. intTemp = ascb(binItem.Read(1))
  142. loop while intTemp = 255 and not binItem.EOS
  143. if intTemp < 192 or intTemp > 195 Then
  144. binItem.read(Bin2Val(binItem.Read(2))-2)
  145. else
  146. Exit do
  147. End if
  148. do
  149. intTemp = ascb(binItem.Read(1))
  150. loop while intTemp < 255 and not binItem.EOS
  151. loop
  152. binItem.Read(3)
  153. objForm.Add strInam&"_Height",Bin2Val(binItem.Read(2))
  154. objForm.Add strInam&"_Width",Bin2Val(binItem.Read(2))
  155. elseif strcomp(leftB(strTemp,8),chrb(137) & chrb(80) & chrb(78) & chrb(71) & chrb(13) & chrb(10) & chrb(26) & chrb(10),0)=0 Then
  156. if Lcase(strFext)<>"png" Then strFext="png"
  157. binItem.Position=18
  158. objForm.Add strInam&"_Width",Bin2Val(binItem.Read(2))
  159. binItem.Read(2)
  160. objForm.Add strInam&"_Height",Bin2Val(binItem.Read(2))
  161. elseif strcomp(leftB(strTemp,6),chrb(71) & chrb(73) & chrb(70) & chrb(56) & chrb(57) & chrb(97),0)=0 or strcomp(leftB(strTemp,6),chrb(71) & chrb(73) & chrb(70) & chrb(56) & chrb(55) & chrb(97),0)=0 Then
  162. if Lcase(strFext)<>"gif" Then strFext="gif"
  163. binItem.Position=6
  164. objForm.Add strInam&"_Width",BinVal2(binItem.Read(2))
  165. objForm.Add strInam&"_Height",BinVal2(binItem.Read(2))
  166. elseif strcomp(leftB(strTemp,2),chrb(66) & chrb(77),0)=0 Then
  167. if Lcase(strFext)<>"bmp" Then strFext="bmp"
  168. binItem.Position=18
  169. objForm.Add strInam&"_Width",BinVal2(binItem.Read(4))
  170. objForm.Add strInam&"_Height",BinVal2(binItem.Read(4))
  171. End if
  172. End if
  173. objForm.Add strInam&"_Ext",strFext
  174. objForm.Add strInam&"_From",p_start
  175. intTemp=GetFerr(lngFsiz,strFext)
  176. if p_AutoSave<>2 Then
  177. objForm.Add strInam&"_Err",intTemp
  178. if intTemp=0 Then
  179. if p_AutoSave=0 Then
  180. strFnam=GetTimeStr()
  181. if strFext<>"" Then strFnam=strFnam&"."&strFext
  182. End if
  183. binItem.SaveToFile Server.MapPath(p_SavePath&strFnam),2
  184. objForm.Add strInam,strFnam
  185. End if
  186. End if
  187. else
  188. objForm.Add strInam&"_Err",-1
  189. End if
  190. End if
  191. else
  192. binItem.Position=0
  193. binItem.Type=2
  194. binItem.Charset="gb2312"
  195. strTemp=binItem.ReadText
  196. if objForm.Exists(strInam) Then
  197. objForm(strInam) = objForm(strInam)&","&strTemp
  198. else
  199. strFormItem=strFormItem&strSplit&strInam
  200. objForm.Add strInam,strTemp
  201. End if
  202. End if
  203. binItem.Close()
  204. p_start = p_end+intSeparator+2
  205. loop Until p_start+3>lngRequestSize
  206. FormItem=split(strFormItem,strSplit)
  207. FileItem=split(strFileItem,strSplit)
  208. End Sub
  209. Private Function GetTimeStr()
  210. lngTime=lngTime+1
  211. GetTimeStr=strDate&lngTime
  212. End Function
  213. Private Function GetFerr(lngFsiz,strFext)
  214. Dim intFerr
  215. intFerr=0
  216. if lngFsiz>p_MaxSize and p_MaxSize>0 Then
  217. if p_Error=0 or p_Error=2 Then p_Error=p_Error+1
  218. intFerr=intFerr+1
  219. End if
  220. if Instr(1,LCase("/"&p_FileType&"/"),LCase("/"&strFext&"/"))=0 and p_FileType<>"" Then
  221. if p_Error<2 Then p_Error=p_Error+2
  222. intFerr=intFerr+2
  223. End if
  224. GetFerr=intFerr
  225. End Function
  226. Public Function Save(Item,strFnam)
  227. Save=false
  228. if objForm.Exists(Item&"_From") Then
  229. Dim intFerr,strFext
  230. strFext=objForm(Item&"_Ext")
  231. intFerr=GetFerr(objForm(Item&"_Size"),strFext)
  232. if objForm.Exists(Item&"_Err") Then
  233. if intFerr=0 Then
  234. objForm(Item&"_Err")=0
  235. End if
  236. else
  237. objForm.Add Item&"_Err",intFerr
  238. End if
  239. if intFerr<>0 Then Exit Function
  240. if VarType(strFnam)=2 Then
  241. select case strFnam
  242. case 0:strFnam=GetTimeStr()
  243. if strFext<>"" Then strFnam=strFnam&"."&strFext
  244. case 1:strFnam=objForm(Item&"_Name")
  245. End select
  246. End if
  247. binItem.Type = 1
  248. binItem.open
  249. binForm.Position = objForm(Item&"_From")
  250. binForm.CopyTo binItem,objForm(Item&"_Size")
  251. binItem.SaveToFile Server.MapPath(p_SavePath&strFnam),2
  252. binItem.Close()
  253. if objForm.Exists(Item) Then
  254. objForm(Item)=strFnam
  255. else
  256. objForm.Add Item,strFnam
  257. End if
  258. Save=true
  259. End if
  260. End Function
  261. Public Function GetData(Item)
  262. GetData=""
  263. if objForm.Exists(Item&"_From") Then
  264. if GetFerr(objForm(Item&"_Size"),objForm(Item&"_Ext"))<>0 Then Exit Function
  265. binForm.Position = objForm(Item&"_From")
  266. GetData=binFormStream.Read(objForm(Item&"_Size"))
  267. End if
  268. End Function
  269. Public Function Form(Item)
  270. if objForm.Exists(Item) Then
  271. Form=objForm(Item)
  272. else
  273. Form=""
  274. End if
  275. End Function
  276. Private Function BinVal2(bin)
  277. Dim lngValue,i
  278. lngValue = 0
  279. for i = lenb(bin) to 1 step -1
  280. lngValue = lngValue *256 + ascb(midb(bin,i,1))
  281. next
  282. BinVal2=lngValue
  283. End Function
  284. Private Function Bin2Val(bin)
  285. Dim lngValue,i
  286. lngValue = 0
  287. for i = 1 to lenb(bin)
  288. lngValue = lngValue *256 + ascb(midb(bin,i,1))
  289. next
  290. Bin2Val=lngValue
  291. End Function
  292. End Class
  293. %>