UpLoadClass.asp
上传用户:szhf331
上传日期:2022-06-22
资源大小:1032k
文件大小:11k
源码类别:

行业应用

开发平台:

JavaScript

  1. <%
  2. '----------------------------------------------------------
  3. '*****************  风声无组件上传类 2.1  *****************
  4. '作者:风声
  5. '网站:http://www.fonshen.com
  6. '邮件:webmaster@fonshen.com
  7. '版权:版权全体,源代码公开,各种用途均可免费使用
  8. '**********************************************************
  9. '----------------------------------------------------------
  10. Class UpLoadClass
  11. Private m_TotalSize,m_MaxSize,m_FileType,m_SavePath,m_AutoSave,m_Error,m_Charset
  12. Private m_dicForm,m_binForm,m_binItem,m_strDate,m_lngTime
  13. Public FormItem,FileItem
  14. Public Property Get Version
  15. Version="Fonshen UpLoadClass Version 2.1"
  16. End Property
  17. Public Property Get Error
  18. Error=m_Error
  19. End Property
  20. Public Property Get Charset
  21. Charset=m_Charset
  22. End Property
  23. Public Property Let Charset(strCharset)
  24. m_Charset=strCharset
  25. End Property
  26. Public Property Get TotalSize
  27. TotalSize=m_TotalSize
  28. End Property
  29. Public Property Let TotalSize(lngSize)
  30. if isNumeric(lngSize) then m_TotalSize=Clng(lngSize)
  31. End Property
  32. Public Property Get MaxSize
  33. MaxSize=m_MaxSize
  34. End Property
  35. Public Property Let MaxSize(lngSize)
  36. if isNumeric(lngSize) then m_MaxSize=Clng(lngSize)
  37. End Property
  38. Public Property Get FileType
  39. FileType=m_FileType
  40. End Property
  41. Public Property Let FileType(strType)
  42. m_FileType=strType
  43. End Property
  44. Public Property Get SavePath
  45. SavePath=m_SavePath
  46. End Property
  47. Public Property Let SavePath(strPath)
  48. m_SavePath=Replace(strPath,chr(0),"")
  49. End Property
  50. Public Property Get AutoSave
  51. AutoSave=m_AutoSave
  52. End Property
  53. Public Property Let AutoSave(byVal Flag)
  54. select case Flag
  55. case 0,1,2: m_AutoSave=Flag
  56. end select
  57. End Property
  58. Private Sub Class_Initialize
  59. m_Error    = -1
  60. m_Charset  = "gb2312"
  61. m_TotalSize= 0
  62. m_MaxSize  = 153600
  63. m_FileType = "jpg/gif"
  64. m_SavePath = ""
  65. m_AutoSave = 0
  66. Dim dtmNow : dtmNow = Date()
  67. m_strDate  = Year(dtmNow)&Right("0"&Month(dtmNow),2)&Right("0"&Day(dtmNow),2)
  68. m_lngTime  = Clng(Timer()*1000)
  69. Set m_binForm = Server.CreateObject("ADODB.Stream")
  70. Set m_binItem = Server.CreateObject("ADODB.Stream")
  71. Set m_dicForm = Server.CreateObject("Scripting.Dictionary")
  72. m_dicForm.CompareMode = 1
  73. End Sub
  74. Private Sub Class_Terminate
  75. m_dicForm.RemoveAll
  76. Set m_dicForm = nothing
  77. Set m_binItem = nothing
  78. m_binForm.Close()
  79. Set m_binForm = nothing
  80. End Sub
  81. Public Function Open()
  82. Open = 0
  83. if m_Error=-1 then
  84. m_Error=0
  85. else
  86. Exit Function
  87. end if
  88. Dim lngRequestSize : lngRequestSize=Request.TotalBytes
  89. if m_TotalSize>0 and lngRequestSize>m_TotalSize then
  90. m_Error=5
  91. Exit Function
  92. elseif lngRequestSize<1 then
  93. m_Error=4
  94. Exit Function
  95. end if
  96. Dim lngChunkByte : lngChunkByte = 102400
  97. Dim lngReadSize : lngReadSize = 0
  98. m_binForm.Type = 1
  99. m_binForm.Open()
  100. do
  101. m_binForm.Write Request.BinaryRead(lngChunkByte)
  102. lngReadSize=lngReadSize+lngChunkByte
  103. if  lngReadSize >= lngRequestSize then exit do
  104. loop
  105. m_binForm.Position=0
  106. Dim binRequestData : binRequestData=m_binForm.Read()
  107. Dim bCrLf,strSeparator,intSeparator
  108. bCrLf=ChrB(13)&ChrB(10)
  109. intSeparator=InstrB(1,binRequestData,bCrLf)-1
  110. strSeparator=LeftB(binRequestData,intSeparator)
  111. Dim strItem,strInam,strFtyp,strPuri,strFnam,strFext,lngFsiz
  112. Const strSplit="'"">"
  113. Dim strFormItem,strFileItem,intTemp,strTemp
  114. Dim p_start : p_start=intSeparator+2
  115. Dim p_end
  116. Do
  117. p_end = InStrB(p_start,binRequestData,bCrLf&bCrLf)-1
  118. m_binItem.Type=1
  119. m_binItem.Open()
  120. m_binForm.Position=p_start
  121. m_binForm.CopyTo m_binItem,p_end-p_start
  122. m_binItem.Position=0
  123. m_binItem.Type=2
  124. m_binItem.Charset=m_Charset
  125. strItem = m_binItem.ReadText()
  126. m_binItem.Close()
  127. intTemp=Instr(39,strItem,"""")
  128. strInam=Mid(strItem,39,intTemp-39)
  129. p_start = p_end + 4
  130. p_end = InStrB(p_start,binRequestData,strSeparator)-1
  131. m_binItem.Type=1
  132. m_binItem.Open()
  133. m_binForm.Position=p_start
  134. lngFsiz=p_end-p_start-2
  135. m_binForm.CopyTo m_binItem,lngFsiz
  136. if Instr(intTemp,strItem,"filename=""")<>0 then
  137. if not m_dicForm.Exists(strInam&"_From") then
  138. strFileItem=strFileItem&strSplit&strInam
  139. if m_binItem.Size<>0 then
  140. intTemp=intTemp+13
  141. strFtyp=Mid(strItem,Instr(intTemp,strItem,"Content-Type: ")+14)
  142. strPuri=Mid(strItem,intTemp,Instr(intTemp,strItem,"""")-intTemp)
  143. intTemp=InstrRev(strPuri,"")
  144. strFnam=Mid(strPuri,intTemp+1)
  145. m_dicForm.Add strInam&"_Type",strFtyp
  146. m_dicForm.Add strInam&"_Name",strFnam
  147. m_dicForm.Add strInam&"_Path",Left(strPuri,intTemp)
  148. m_dicForm.Add strInam&"_Size",lngFsiz
  149. if Instr(strFnam,".")<>0 then
  150. strFext=Mid(strFnam,InstrRev(strFnam,".")+1)
  151. else
  152. strFext=""
  153. end if
  154. select case strFtyp
  155. case "image/jpeg","image/pjpeg","image/jpg"
  156. if Lcase(strFext)<>"jpg" then strFext="jpg"
  157. m_binItem.Position=3
  158. do while not m_binItem.EOS
  159. do
  160. intTemp = Ascb(m_binItem.Read(1))
  161. loop while intTemp = 255 and not m_binItem.EOS
  162. if intTemp < 192 or intTemp > 195 then
  163. m_binItem.read(Bin2Val(m_binItem.Read(2))-2)
  164. else
  165. Exit do
  166. end if
  167. do
  168. intTemp = Ascb(m_binItem.Read(1))
  169. loop while intTemp < 255 and not m_binItem.EOS
  170. loop
  171. m_binItem.Read(3)
  172. m_dicForm.Add strInam&"_Height",Bin2Val(m_binItem.Read(2))
  173. m_dicForm.Add strInam&"_Width",Bin2Val(m_binItem.Read(2))
  174. case "image/gif"
  175. if Lcase(strFext)<>"gif" then strFext="gif"
  176. m_binItem.Position=6
  177. m_dicForm.Add strInam&"_Width",BinVal2(m_binItem.Read(2))
  178. m_dicForm.Add strInam&"_Height",BinVal2(m_binItem.Read(2))
  179. case "image/png","image/x-png"
  180. if Lcase(strFext)<>"png" then strFext="png"
  181. m_binItem.Position=18
  182. m_dicForm.Add strInam&"_Width",Bin2Val(m_binItem.Read(2))
  183. m_binItem.Read(2)
  184. m_dicForm.Add strInam&"_Height",Bin2Val(m_binItem.Read(2))
  185. case "image/bmp"
  186. if Lcase(strFext)<>"bmp" then strFext="bmp"
  187. m_binItem.Position=18
  188. m_dicForm.Add strInam&"_Width",BinVal2(m_binItem.Read(4))
  189. m_dicForm.Add strInam&"_Height",BinVal2(m_binItem.Read(4))
  190. case "application/x-shockwave-flash"
  191. if Lcase(strFext)<>"swf" then strFext="swf"
  192. m_binItem.Position=0
  193. if Ascb(m_binItem.Read(1))=70 then
  194. m_binItem.Position=8
  195. strTemp = Num2Str(Ascb(m_binItem.Read(1)), 2 ,8)
  196. intTemp = Str2Num(Left(strTemp, 5), 2)
  197. strTemp = Mid(strTemp, 6)
  198. while (Len(strTemp) < intTemp * 4)
  199. strTemp = strTemp & Num2Str(Ascb(m_binItem.Read(1)), 2 ,8)
  200. wend
  201. m_dicForm.Add strInam&"_Width", Int(Abs(Str2Num(Mid(strTemp, intTemp + 1, intTemp), 2) - Str2Num(Mid(strTemp, 1, intTemp), 2)) / 20)
  202. m_dicForm.Add strInam&"_Height",Int(Abs(Str2Num(Mid(strTemp, 3 * intTemp + 1, intTemp), 2) - Str2Num(Mid(strTemp, 2 * intTemp + 1, intTemp), 2)) / 20)
  203. end if
  204. end select
  205. m_dicForm.Add strInam&"_Ext",strFext
  206. m_dicForm.Add strInam&"_From",p_start
  207. intTemp=GetFerr(lngFsiz,strFext)
  208. if m_AutoSave<>2 then
  209. m_dicForm.Add strInam&"_Err",intTemp
  210. if intTemp=0 then
  211. if m_AutoSave=0 then
  212. strFnam=GetTimeStr()
  213. if strFext<>"" then strFnam=strFnam&"."&strFext
  214. end if
  215. m_binItem.SaveToFile Server.MapPath(m_SavePath&strFnam),2
  216. m_dicForm.Add strInam,strFnam
  217. end if
  218. end if
  219. else
  220. m_dicForm.Add strInam&"_Err",-1
  221. end if
  222. end if
  223. else
  224. m_binItem.Position=0
  225. m_binItem.Type=2
  226. m_binItem.Charset=m_Charset
  227. strTemp=m_binItem.ReadText
  228. if m_dicForm.Exists(strInam) then
  229. m_dicForm(strInam) = m_dicForm(strInam)&","&strTemp
  230. else
  231. strFormItem=strFormItem&strSplit&strInam
  232. m_dicForm.Add strInam,strTemp
  233. end if
  234. end if
  235. m_binItem.Close()
  236. p_start = p_end+intSeparator+2
  237. loop Until p_start+3>lngRequestSize
  238. FormItem=Split(strFormItem,strSplit)
  239. FileItem=Split(strFileItem,strSplit)
  240. Open = lngRequestSize
  241. End Function
  242. Private Function GetTimeStr()
  243. m_lngTime=m_lngTime+1
  244. GetTimeStr=m_strDate&Right("00000000"&m_lngTime,8)
  245. End Function
  246. Private Function GetFerr(lngFsiz,strFext)
  247. dim intFerr
  248. intFerr=0
  249. if lngFsiz>m_MaxSize and m_MaxSize>0 then
  250. if m_Error=0 or m_Error=2 then m_Error=m_Error+1
  251. intFerr=intFerr+1
  252. end if
  253. if Instr(1,LCase("/"&m_FileType&"/"),LCase("/"&strFext&"/"))=0 and m_FileType<>"" then
  254. if m_Error<2 then m_Error=m_Error+2
  255. intFerr=intFerr+2
  256. end if
  257. GetFerr=intFerr
  258. End Function
  259. Public Function Save(Item,strFnam)
  260. Save=false
  261. if m_dicForm.Exists(Item&"_From") then
  262. dim intFerr,strFext
  263. strFext=m_dicForm(Item&"_Ext")
  264. intFerr=GetFerr(m_dicForm(Item&"_Size"),strFext)
  265. if m_dicForm.Exists(Item&"_Err") then
  266. if intFerr=0 then
  267. m_dicForm(Item&"_Err")=0
  268. end if
  269. else
  270. m_dicForm.Add Item&"_Err",intFerr
  271. end if
  272. if intFerr<>0 then Exit Function
  273. if VarType(strFnam)=2 then
  274. select case strFnam
  275. case 0:strFnam=GetTimeStr()
  276. if strFext<>"" then strFnam=strFnam&"."&strFext
  277. case 1:strFnam=m_dicForm(Item&"_Name")
  278. end select
  279. end if
  280. m_binItem.Type = 1
  281. m_binItem.Open
  282. m_binForm.Position = m_dicForm(Item&"_From")
  283. m_binForm.CopyTo m_binItem,m_dicForm(Item&"_Size")
  284. m_binItem.SaveToFile Server.MapPath(m_SavePath&strFnam),2
  285. m_binItem.Close()
  286. if m_dicForm.Exists(Item) then
  287. m_dicForm(Item)=strFnam
  288. else
  289. m_dicForm.Add Item,strFnam
  290. end if
  291. Save=true
  292. end if
  293. End Function
  294. Public Function GetData(Item)
  295.     GetData=""
  296. if m_dicForm.Exists(Item&"_From") then
  297. if GetFerr(m_dicForm(Item&"_Size"),m_dicForm(Item&"_Ext"))<>0 then Exit Function
  298. m_binForm.Position = m_dicForm(Item&"_From")
  299. GetData=m_binForm.Read(m_dicForm(Item&"_Size"))
  300. end if
  301. End Function
  302. Public Function Form(Item)
  303. if m_dicForm.Exists(Item) then
  304. Form=m_dicForm(Item)
  305. else
  306. Form=""
  307. end if
  308. End Function
  309. Private Function BinVal2(bin)
  310. dim lngValue,i
  311. lngValue = 0
  312. for i = lenb(bin) to 1 step -1
  313. lngValue = lngValue *256 + Ascb(midb(bin,i,1))
  314. next
  315. BinVal2=lngValue
  316. End Function
  317. Private Function Bin2Val(bin)
  318. dim lngValue,i
  319. lngValue = 0
  320. for i = 1 to lenb(bin)
  321. lngValue = lngValue *256 + Ascb(midb(bin,i,1))
  322. next
  323. Bin2Val=lngValue
  324. End Function
  325. Private Function Num2Str(num, base, lens)
  326. Dim ret,i
  327. ret = ""
  328. while(num >= base)
  329. i   = num Mod base
  330. ret = i & ret
  331. num = (num - i) / base
  332. wend
  333. Num2Str = Right(String(lens, "0") & num & ret, lens)
  334. End Function
  335. Private Function Str2Num(str, base)
  336. Dim ret, i
  337. ret = 0 
  338. for i = 1 to Len(str)
  339. ret = ret * base + Cint(Mid(str, i, 1))
  340. next
  341. Str2Num = ret
  342. End Function
  343. End Class
  344. %>