任务:在一个表单中上传两张图片!分别保存在img文件夹中的两个小文件夹A和B中,并将图片地址显示在表单中,然后提交到数据库中,保存起来。第一步:制作表单(index.asp)<body>
<form name="myform" method="post" action="">
  <p>
    <input name="pic1" type="text" id="pic" size="30" VALUE="">
    <input type="button" name="Submit11" value="上传图片" onClick="window.open('upfile.asp?formname=myform&editname=pic1&uppath=img/A&filelx=jpg','','status=no,scrollbars=no,top=20,left=110,width=420,height=165')">
  </p>
  <p><input name="pic2" type="text" id="pic" size="30" VALUE="">
    <input type="button" name="Submit11" value="上传图片" onClick="window.open('upfile.asp?formname=myform&editname=pic2&uppath=img/B&filelx=jpg','','status=no,scrollbars=no,top=20,left=110,width=420,height=165')">
</p>
</form>
</body>   第二步:制作上传的界面表单(upfile.asp)<%
uppath=request.QueryString("uppath")&"/"
filelx=request.QueryString("filelx")
formName=request.QueryString("formName")
EditName=request.QueryString("EditName")
%>
<html>
<head>
<title>图片上传</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script language="javascript">
<!--
function mysub()
{
  esave.style.visibility="visible";
}
-->
</script>
</head><body bgcolor="#FFFFFF" text="#000000">
<form name="form1" method="post" action="upload.asp" enctype="multipart/form-data" >
  <div id="esave" style="position:absolute; top:18px; left:40px; z-index:10; visibility:hidden"> 
    <TABLE WIDTH=340 BORDER=0 CELLSPACING=0 CELLPADDING=0>
      <TR><td width=20%></td>
 <TD bgcolor=#104A7B width="60%"> 
 <TABLE WIDTH=100% height=120 BORDER=0 CELLSPACING=1 CELLPADDING=0>
 <TR> 
           <td bgcolor=#eeeeee align=center><font color=red>正在上传文件,请稍候...</font></td>
 </tr>
 </table>
 </td><td width=20%></td>
 </tr></table></div>
  <table width="400" border="0" cellspacing="1" cellpadding="0" align="center" bgcolor="#6699ff">
    <tr> 
      <td height="22" align="left" valign="middle" width="400">&nbsp;图片上传 
        <input type="hidden" name="filepath" value="<%=uppath%>">
        <input type="hidden" name="filelx" value="<%=filelx%>">
        <input type="hidden" name="EditName" value="<%=EditName%>">
        <input type="hidden" name="FormName" value="<%=formName%>">
        <input type="hidden" name="act" value="uploadfile">
      </td>
    </tr>
    <tr align="center" valign="middle" bgcolor="#FFFFFF"> 
      <td align="left" id="upid" height="80" width="400"> 选择文件: 
        <input type="file" name="file1" style="width:300'" class="tx1" value="">
      </td>
    </tr>
    <tr align="center" valign="middle"> 
      <td height="24" width="400"> 
        <input type="submit" name="Submit" value="上传 " class="button" onclick="javascript:mysub()">
      </td>
    </tr>
  </table>
</form>
</body>
</html>
 第三步:上传文件(upload.asp)<!--#include file="upload.inc"-->
<style>
td{font-size:9pt;line-height:120%;color:#353535} 
body{font-size:9pt;line-height:120%} a:link          { color: #000000; text-decoration: none }
a:visited       { color: #000000; text-decoration: none }
a:active        { color: #000000; text-decoration: none }
a:hover         { color: #336699; text-decoration: none; position: relative; right: 0px; top: 1px }
</style>
<%
set upload=new upload_file
if upload.form("act")="uploadfile" then
 filepath=trim(upload.form("filepath"))
 filelx=trim(upload.form("filelx"))
 
 i=0
 for each formName in upload.File
  set file=upload.File(formName)
 
 fileExt=lcase(file.FileExt) '得到的文件扩展名不含有.
 if file.filesize<100 then
  response.write "<span style=""font-family: 宋体; font-size: 9pt"">请先选择你要上传的文件! [ <a href=# onclick=history.go(-1)>重新上传</a> ]</span>"
 response.end
 end if
 if (filelx<>"swf") and (filelx<>"jpg") then 
  response.write "<span style=""font-family: 宋体; font-size: 9pt"">该文件类型不能上传! [ <a href=# onclick=history.go(-1)>重新上传</a> ]</span>"
 response.end
 end if
 if filelx="swf" then
 if fileext<>"swf"  then
  response.write "<span style=""font-family: 宋体; font-size: 9pt"">只能上传swf格式的Flash文件! [ <a href=# onclick=history.go(-1)>重新上传</a> ]</span>"
  response.end
 end if
 end if
 if filelx="jpg" then
 if fileext<>"gif" and fileext<>"jpg"  then
  response.write "<span style=""font-family: 宋体; font-size: 9pt"">只能上传jpg或gif格式的图片! [ <a href=# onclick=history.go(-1)>重新上传</a> ]</span>"
  response.end
      end if
 end if
 if filelx="swf" then
 if file.filesize>(3000*1024) then
  response.write "<span style=""font-family: 宋体; font-size: 9pt"">最大只能上传 3M 的Flash文件! [ <a href=# onclick=history.go(-1)>重新上传</a> ]</span>"
  response.end
 end if
 end if
 if filelx="jpg" then
 if file.filesize>(1000*1024) then
  response.write "<span style=""font-family: 宋体; font-size: 9pt"">最大只能上传 1000K 的图片文件! [ <a href=# onclick=history.go(-1)>重新上传</a> ]</span>"
  response.end
 end if
 end if randomize
 ranNum=int(90000*rnd)+10000
 filename=filepath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt
%>
<%
 if file.FileSize>0 then         ''如果 FileSize > 0 说明有文件数据
  'file.SaveAs Server.mappath(filename)   ''保存文件
  file.SaveToFile Server.mappath(FileName)
  'response.write file.FileName&"  上传成功!  <br>"
  'response.write "新文件名:"&FileName&"<br>"
  'response.write "新文件名已复制到所需的位置,可关闭窗口!"
  if filelx="swf" then
      response.write "<script>window.opener.document."&upload.form("FormName")&".size.value='"&int(file.FileSize/1024)&" K'</script>"
  end if
  response.write "<script>window.opener.document."&upload.form("FormName")&"."&upload.form("EditName")&".value='"&FileName&"'</script>"
%>
<%
 end if
 set file=nothing
 next
 set upload=nothing
end if
%>
<script language="javascript">
window.alert("文件上传成功!");
window.close();
</script>

解决方案 »

  1.   

    第四步:在IMG文件夹中建立两个小的文件夹A和B
    第五步:在这些程序网页的目录下,建立包含INC文件lupload.inc<%
    '----------------------------------------------------------------------
    '转发时请保留此声明信息,这段声明不并会影响你的速度!
    '*******************    无组件上传类   ********************************
    '修改者:梁无惧
    '电子邮件:[email protected]
    '网站:http://www.25cn.com
    '原作者:稻香老农
    '原作者网站:http://www.5xsoft.com
    '声明:此上传类是在化境编程界发布的无组件上传类的基础上修改的.
    '在与化境编程界无组件上传类相比,速度快了将近50倍,当上传4M大小的文件时
    '服务器只需要10秒就可以处理完,是目前最快的无组件上传程序,当前版本为0.96
    '源代码公开,免费使用,对于商业用途,请与作者联系
    '文件属性:例如上传文件为c:\myfile\doc.txt
    'FileName    文件名       字符串    "doc.txt"
    'FileSize    文件大小     数值       1210
    'FileType    文件类型     字符串    "text/plain"
    'FileExt     文件扩展名   字符串    "txt"
    'FilePath    文件原路径   字符串    "c:\myfile"
    '使用时注意事项:
    '由于Scripting.Dictionary区分大小写,所以在网页及ASP页的项目名都要相同的大小
    '写,如果人习惯用大写或小写,为了防止出错的话,可以把
    'sFormName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
    '改为
    '(小写者)sFormName = LCase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))
    '(大写者)sFormName = UCase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))
    '**********************************************************************
    '----------------------------------------------------------------------
    dim oUpFileStreamClass upload_file
      
    dim Form,File,Version
      
    Private Sub Class_Initialize 
       '定义变量
      dim RequestBinDate,sStart,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfo
      dim iFileSize,sFilePath,sFileType,sFormvalue,sFileName
      dim iFindStart,iFindEnd
      dim iFormStart,iFormEnd,sFormName
       '代码开始
      Version="无组件上传类 Version 0.96"
      set Form = Server.CreateObject("Scripting.Dictionary")
      set File = Server.CreateObject("Scripting.Dictionary")
      if Request.TotalBytes < 1 then Exit Sub
      set tStream = Server.CreateObject("adodb.stream")
      set oUpFileStream = Server.CreateObject("adodb.stream")
      oUpFileStream.Type = 1
      oUpFileStream.Mode = 3
      oUpFileStream.Open 
      oUpFileStream.Write Request.BinaryRead(Request.TotalBytes)
      oUpFileStream.Position=0
      RequestBinDate = oUpFileStream.Read 
      iFormEnd = oUpFileStream.Size
      bCrLf = chrB(13) & chrB(10)
      '取得每个项目之间的分隔符
      sStart = MidB(RequestBinDate,1, InStrB(1,RequestBinDate,bCrLf)-1)
      iStart = LenB (sStart)
      iFormStart = iStart+2
      '分解项目
      Do
        iInfoEnd = InStrB(iFormStart,RequestBinDate,bCrLf & bCrLf)+3
        tStream.Type = 1
        tStream.Mode = 3
        tStream.Open
        oUpFileStream.Position = iFormStart
        oUpFileStream.CopyTo tStream,iInfoEnd-iFormStart
        tStream.Position = 0
        tStream.Type = 2
        tStream.Charset ="gb2312"
        sInfo = tStream.ReadText      
        '取得表单项目名称
        iFormStart = InStrB(iInfoEnd,RequestBinDate,sStart)-1
        iFindStart = InStr(22,sInfo,"name=""",1)+6
        iFindEnd = InStr(iFindStart,sInfo,"""",1)
        sFormName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
        '如果是文件
        if InStr (45,sInfo,"filename=""",1) > 0 then
          set oFileInfo= new FileInfo
          '取得文件属性
          iFindStart = InStr(iFindEnd,sInfo,"filename=""",1)+10
          iFindEnd = InStr(iFindStart,sInfo,"""",1)
          sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
          oFileInfo.FileName = GetFileName(sFileName)
          oFileInfo.FilePath = GetFilePath(sFileName)
          oFileInfo.FileExt = GetFileExt(sFileName)
          iFindStart = InStr(iFindEnd,sInfo,"Content-Type: ",1)+14
          iFindEnd = InStr(iFindStart,sInfo,vbCr)
          oFileInfo.FileType = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
          oFileInfo.FileStart = iInfoEnd
          oFileInfo.FileSize = iFormStart -iInfoEnd -2
          oFileInfo.FormName = sFormName
          file.add sFormName,oFileInfo
        else
        '如果是表单项目
          tStream.Close
          tStream.Type = 1
          tStream.Mode = 3
          tStream.Open
          oUpFileStream.Position = iInfoEnd 
          oUpFileStream.CopyTo tStream,iFormStart-iInfoEnd-2
          tStream.Position = 0
          tStream.Type = 2
          tStream.Charset = "gb2312"
          sFormvalue = tStream.ReadText 
          form.Add sFormName,sFormvalue
        end if
        tStream.Close
        iFormStart = iFormStart+iStart+2
        '如果到文件尾了就退出
        loop until (iFormStart+2) = iFormEnd 
      RequestBinDate=""
      set tStream = nothing
    End SubPrivate Sub Class_Terminate  
      '清除变量及对像
      if not Request.TotalBytes<1 then
        oUpFileStream.Close
        set oUpFileStream =nothing
        end if
      Form.RemoveAll
      File.RemoveAll
      set Form=nothing
      set File=nothing
    End Sub
       
     '取得文件路径
    Private function GetFilePath(FullPath)
      If FullPath <> "" Then
        GetFilePath = left(FullPath,InStrRev(FullPath, "\"))
        Else
        GetFilePath = ""
      End If
    End function
     
    '取得文件名
    Private function GetFileName(FullPath)
      If FullPath <> "" Then
        GetFileName = mid(FullPath,InStrRev(FullPath, "\")+1)
        Else
        GetFileName = ""
      End If
    End function'取得扩展名
    Private function GetFileExt(FullPath)
      If FullPath <> "" Then
        GetFileExt = mid(FullPath,InStrRev(FullPath, ".")+1)
        Else
        GetFileExt = ""
      End If
    End functionEnd Class'文件属性类
    Class FileInfo
      dim FormName,FileName,FilePath,FileSize,FileType,FileStart,FileExt
      Private Sub Class_Initialize 
        FileName = ""
        FilePath = ""
        FileSize = 0
        FileStart= 0
        FormName = ""
        FileType = ""
        FileExt = ""
      End Sub
      
    '保存文件方法
     Public function SaveToFile(FullPath)
        dim oFileStream,ErrorChar,i
        SaveToFile=1
        if trim(fullpath)="" or right(fullpath,1)="/" then exit function
        set oFileStream=CreateObject("Adodb.Stream")
        oFileStream.Type=1
        oFileStream.Mode=3
        oFileStream.Open
        oUpFileStream.position=FileStart
        oUpFileStream.copyto oFileStream,FileSize
        oFileStream.SaveToFile FullPath,2
        oFileStream.Close
        set oFileStream=nothing 
        SaveToFile=0
      end function
    End Class
    %>
    --------------------------------------------------------------------------请教大家:
    1,在第三步中,文件upfile.inc起到什么作用?
    2,图片上传完成后,图片地址是如何显示在表单中的?具体的代码是哪一句呢?  
    非常感谢!!!