asp无组件上传图片并生成缩略图

 
  1. 先创建一文件夹,并创建虚拟目录或站长点。
  2. 1.增加上传页xAdd.html
  3. 无组件上传
  4. "POST" name="myform" action="xSave.asp" target="_self">
  5. "PicPath" type="text" id="PicPath" readonly="true">
  6. "sPicPath" type="hidden" id="sPicPath">
  7. "Upload" src="upload.htm" frameborder=0 scrolling=no width="100%" height="20">
  8. "" id="objimg" style="display:none;" />
  9. 2.上传页upload.htm
  10. "Content-Type" content="text/html; charset=gb2312">
  11. function check_file() 
  12. {
  13.   var strFileName=form.FileName.value;
  14.   if (strFileName=="")
  15.   {
  16.     alert("请选择要上传的文件");
  17.     return false;
  18.   }
  19. }
  20. "0" topmargin="0">
  21. "upfile.asp" method="post" name="form1" enctype="multipart/form-data">
  22.   "FileName" type="FILE" class="tx1" size="20" onChange="window.parent.document.getElementById('objimg').src=this.value;window.parent.document.getElementById('objimg').style.display='';">
  23.   "submit" name="Submit" value="上传">
  24. 3.上传保存代码页upfile.asp
  25. <%
  26. Const MaxFileSize=300        '上传文件大小限制单位k
  27. Const UpFileType="gif|jpg|bmp|png"        '允许的上传文件类型
  28. set fs=createobject("scripting.filesystemobject"
  29. %>
  30. "Content-Type" content="text/html; charset=gb2312">
  31. <%
  32. call upload_0()  '使用化境无组件上传类
  33. %>
  34. <%
  35. sub upload_0()    '使用化境无组件上传类
  36.     set upload=new upload_file    '建立上传对象
  37.     for each formName in upload.file '列出所有上传了的文件
  38.         set file=upload.file(formName)  '生成一个文件对象
  39.         if file.filesize<100 then
  40.             msg="请先选择你要上传的文件!"
  41.             founderr=true
  42.         end if
  43.         if file.filesize>(MaxFileSize*1024) then
  44.             msg="文件大小超过了限制,最大只能上传" & CStr(MaxFileSize) & "K的文件!"
  45.             founderr=true
  46.         end if
  47.         fileExt=lcase(file.FileExt)
  48.         Forumupload=split(UpFileType,"|")
  49.         for i=0 to ubound(Forumupload)
  50.             if fileEXT=trim(Forumupload(i)) then
  51.                 EnableUpload=true
  52.                 exit for
  53.             end if
  54.         next
  55.         if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" then
  56.             EnableUpload=false
  57.         end if
  58.         if EnableUpload=false then
  59.             msg="这种文件类型不允许上传!/n/n只允许上传这几种文件类型:" & UpFileType
  60.                         response.write"alert('这种文件类型不允许上传!/n/n只允许上传这几种文件类型:" & UpFileType & "');"
  61.                         response.write"javascript:history.go(-1)"
  62.          founderr=true
  63.         end if
  64.         
  65.         strJS="" & vbcrlf
  66.         if founderr<>true then
  67.             randomize
  68.             ranNum=int(900*rnd)+100
  69.             filename=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum"."
  70.             file.SaveToFile Server.mappath(FileName)   '保存文件
  71.             file_on=Server.mappath(FileName)
  72.             if fs.FileExists(file_on) then
  73.                 Set Jpeg = Server.CreateObject("Persits.Jpeg"
  74.                 Jpeg.Open file_on
  75.                 IW=Jpeg.OriginalWidth
  76.                 IH=Jpeg.OriginalHeight
  77.                 XH=130
  78.                 XW=130
  79.                 If IH>IW Then
  80.                     VW =cint( XH*IW/IH)
  81.                     VH=XH
  82.                 Else
  83.                     if IH=IW THEN
  84.                         VW=XW
  85.                         VH=XH
  86.                     ELSE
  87.                         VW = XW
  88.                         VH=cint(XW*IH/IW)
  89.                     end if
  90.                     
  91.                 End If
  92.                 Jpeg.Width = VW
  93.                 Jpeg.Height = VH
  94.                 fname1=split(Filename,"/")
  95.                 chsave="s"&fname1(Ubound(fname1))
  96.                 Jpeg.Save Server.MapPath(chsave)
  97.                 Jpeg.close
  98.                 Set Jpeg = nothing
  99.                 msg="保存缩位图成功! --"
  100.             else 
  101.                 msg="保存缩位图不成功!--"
  102.             end if
  103.             msg=msg"上传文件成功!"
  104.             FileType=right(fileExt,3)
  105.             strJS=strJS & "window.parent.document.getElementById('PicPath').value='" & replace(filename,"../","") & "';" & vbcrlf
  106.             strJS=strJS & "window.parent.document.getElementById('sPicPath').value='" & replace(chsave,"../","") & "';" & vbcrlf
  107.         end if
  108.         strJS=strJS & "alert('" & msg & "');" & vbcrlf
  109.         strJS=strJS & "history.go(-1);" & vbcrlf
  110.         strJS=strJS & ""
  111.         response.write strJS
  112.         set file=nothing
  113.     next
  114.     set upload=nothing
  115. end sub
  116. %>
  117. 4.upload.asp页
  118. <%
  119. '----------------------------------------------------------------------
  120. '转发时请保留此声明信息,这段声明不并会影响你的速度!
  121. '*******************    无组件上传类   ********************************
  122. '声明:此上传类是在化境编程界发布的无组件上传类的基础上修改的.
  123. '在与化境编程界无组件上传类相比,速度快了将近50倍,当上传4M大小的文件时
  124. '服务器只需要10秒就可以处理完,是目前最快的无组件上传程序,当前版本为0.96
  125. '源代码公开,免费使用,对于商业用途,请与作者联系
  126. '文件属性:例如上传文件为c:/myfile/doc.txt
  127. 'FileName    文件名       字符串    "doc.txt"
  128. 'FileSize    文件大小     数值       1210
  129. 'FileType    文件类型     字符串    "text/plain"
  130. 'FileExt     文件扩展名   字符串    "txt"
  131. 'FilePath    文件原路径   字符串    "c:/myfile"
  132. '使用时注意事项:
  133. '由于Scripting.Dictionary区分大小写,所以在网页及ASP页的项目名都要相同的大小
  134. '写,如果人习惯用大写或小写,为了防止出错的话,可以把
  135. 'sFormName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
  136. '改为
  137. '(小写者)sFormName = LCase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))
  138. '(大写者)sFormName = UCase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))
  139. '**********************************************************************
  140. '----------------------------------------------------------------------
  141. dim oUpFileStream
  142. Class upload_file
  143.   
  144. dim Form,File,Version
  145.   
  146. Private Sub Class_Initialize 
  147.    '定义变量
  148.   dim RequestBinDate,sStart,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfo
  149.   dim iFileSize,sFilePath,sFileType,sFormvalue,sFileName
  150.   dim iFindStart,iFindEnd
  151.   dim iFormStart,iFormEnd,sFormName
  152.    '代码开始
  153.   Version="无组件上传类 Version 0.96"
  154.   set Form = Server.CreateObject("Scripting.Dictionary")
  155.   set File = Server.CreateObject("Scripting.Dictionary")
  156.   if Request.TotalBytes < 1 then Exit Sub
  157.   set tStream = Server.CreateObject("adodb.stream")
  158.   set oUpFileStream = Server.CreateObject("adodb.stream")
  159.   oUpFileStream.Type = 1
  160.   oUpFileStream.Mode = 3
  161.   oUpFileStream.Open 
  162.   oUpFileStream.Write Request.BinaryRead(Request.TotalBytes)
  163.   oUpFileStream.Position=0
  164.   RequestBinDate = oUpFileStream.Read 
  165.   iFormEnd = oUpFileStream.Size
  166.   bCrLf = chrB(13) & chrB(10)
  167.   '取得每个项目之间的分隔符
  168.   sStart = MidB(RequestBinDate,1, InStrB(1,RequestBinDate,bCrLf)-1)
  169.   iStart = LenB (sStart)
  170.   iFormStart = iStart+2
  171.   '分解项目
  172.   Do
  173.     iInfoEnd = InStrB(iFormStart,RequestBinDate,bCrLf & bCrLf)+3
  174.     tStream.Type = 1
  175.     tStream.Mode = 3
  176.     tStream.Open
  177.     oUpFileStream.Position = iFormStart
  178.     oUpFileStream.CopyTo tStream,iInfoEnd-iFormStart
  179.     tStream.Position = 0
  180.     tStream.Type = 2
  181.     tStream.Charset ="gb2312"
  182.     sInfo = tStream.ReadText      
  183.     '取得表单项目名称
  184.     iFormStart = InStrB(iInfoEnd,RequestBinDate,sStart)-1
  185.     iFindStart = InStr(22,sInfo,"name=""",1)+6
  186.     iFindEnd = InStr(iFindStart,sInfo,"""",1)
  187.     sFormName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
  188.     '如果是文件
  189.     if InStr (45,sInfo,"filename=""",1) > 0 then
  190.       set oFileInfo= new FileInfo
  191.       '取得文件属性
  192.       iFindStart = InStr(iFindEnd,sInfo,"filename=""",1)+10
  193.       iFindEnd = InStr(iFindStart,sInfo,"""",1)
  194.       sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
  195.       oFileInfo.FileName = GetFileName(sFileName)
  196.       oFileInfo.FilePath = GetFilePath(sFileName)
  197.       oFileInfo.FileExt = GetFileExt(sFileName)
  198.       iFindStart = InStr(iFindEnd,sInfo,"Content-Type: ",1)+14
  199.       iFindEnd = InStr(iFindStart,sInfo,vbCr)
  200.       oFileInfo.FileType = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
  201.       oFileInfo.FileStart = iInfoEnd
  202.       oFileInfo.FileSize = iFormStart -iInfoEnd -2
  203.       oFileInfo.FormName = sFormName
  204.       file.add sFormName,oFileInfo
  205.     else
  206.     '如果是表单项目
  207.       tStream.Close
  208.       tStream.Type = 1
  209.       tStream.Mode = 3
  210.       tStream.Open
  211.       oUpFileStream.Position = iInfoEnd 
  212.       oUpFileStream.CopyTo tStream,iFormStart-iInfoEnd-2
  213.       tStream.Position = 0
  214.       tStream.Type = 2
  215.       tStream.Charset = "gb2312"
  216.       sFormvalue = tStream.ReadText 
  217.       form.Add sFormName,sFormvalue
  218.     end if
  219.     tStream.Close
  220.     iFormStart = iFormStart+iStart+2
  221.     '如果到文件尾了就退出
  222.     loop until (iFormStart+2) = iFormEnd 
  223.   RequestBinDate=""
  224.   set tStream = nothing
  225. End Sub
  226. Private Sub Class_Terminate  
  227.   '清除变量及对像
  228.   if not Request.TotalBytes<1 then
  229.     oUpFileStream.Close
  230.     set oUpFileStream =nothing
  231.     end if
  232.   Form.RemoveAll
  233.   File.RemoveAll
  234.   set Form=nothing
  235.   set File=nothing
  236. End Sub
  237.    
  238.  '取得文件路径
  239. Private function GetFilePath(FullPath)
  240.   If FullPath <> "" Then
  241.     GetFilePath = left(FullPath,InStrRev(FullPath, "/"))
  242.     Else
  243.     GetFilePath = ""
  244.   End If
  245. End function
  246. '取得文件名
  247. Private function GetFileName(FullPath)
  248.   If FullPath <> "" Then
  249.     GetFileName = mid(FullPath,InStrRev(FullPath, "/")+1)
  250.     Else
  251.     GetFileName = ""
  252.   End If
  253. End function
  254. '取得扩展名
  255. Private function GetFileExt(FullPath)
  256.   If FullPath <> "" Then
  257.     GetFileExt = mid(FullPath,InStrRev(FullPath, ".")+1)
  258.     Else
  259.     GetFileExt = ""
  260.   End If
  261. End function
  262. End Class
  263. '文件属性类
  264. Class FileInfo
  265.   dim FormName,FileName,FilePath,FileSize,FileType,FileStart,FileExt
  266.   Private Sub Class_Initialize 
  267.     FileName = ""
  268.     FilePath = ""
  269.     FileSize = 0
  270.     FileStart= 0
  271.     FormName = ""
  272.     FileType = ""
  273.     FileExt = ""
  274.   End Sub
  275.   
  276. '保存文件方法
  277.  Public function SaveToFile(FullPath)
  278.     dim oFileStream,ErrorChar,i
  279.     SaveToFile=1
  280.     if trim(fullpath)="" or right(fullpath,1)="/" then exit function
  281.     set oFileStream=CreateObject("Adodb.Stream")
  282.     oFileStream.Type=1
  283.     oFileStream.Mode=3
  284.     oFileStream.Open
  285.     oUpFileStream.position=FileStart
  286.     oUpFileStream.copyto oFileStream,FileSize
  287.     oFileStream.SaveToFile FullPath,2
  288.     oFileStream.Close
  289.     set oFileStream=nothing 
  290.     SaveToFile=0
  291.   end function
  292. End Class
  293. %>

你可能感兴趣的:(ASP)