用Asp上传多个附件,修改附件

//Author: William Lin
//Date:   2009-02-26
//QQ:     22967225
//Description: 用Asp上传多个附件,修改附件

一直以来都用.net开发居多,最近有位客户委托修改一个涉及文档管理系统,就是管理公司内部的一些文档用的,涉及到Asp上传一个或多个附件的功能。简单做了一下。

 

1) 网上找了一个 upload_5xsoft.inc

/*** start 新增操作 ****/
2) 前台显示页,主要代码
<td id="tdUpfileID"><input name="upfile" type="file" id="upfile" size="40"><a href="#" onClick="CreateObj()">+</a> </td>
 
<script language="javascript">
  var theCount =1;
  function CreateObj()
  {       
   var board = document.getElementById("tdUpfileID");       
   var newNode = document.createElement("<br>");
   var e = document.createElement("input");
   e.type = "file";
   e.size = 40;
   //这里要注意,一定要保证upfile的Name都是不同的 否则最后 只会上传第一个upfile文件
   e.name = "upfile" + theCount;       
   board.appendChild(newNode);
   board.appendChild(e);
   theCount++;
   return false;
  }
 </script>


后台提交页面
<!--#include file="inc/upload_5xsoft.inc" -->
<%
     
        Dim upload       
        Dim file,filepath,db_filePath,formName,fname
       
        set upload=new upload_5xSoft ''建立上传对象
        filepath="upload/"
  Dim strArrayFileName
  strArrayFileName = ""  
  
  For each formName in upload.file   ''列出所有上传了的文件
   set file=upload.file(formName)   ''生成一个文件对象
    fname = ""
   If file.FileSize>0 then
    fname = file.filename         ''如果 FileSize > 0 说明有文件数据
    file.SaveAs Server.mappath(filepath&fname)    ''保存文件 
    If strArrayFileName = "" Then
     strArrayFileName = fname
    Else
     strArrayFileName = strArrayFileName & "|" &fname  '' 把上传的文件名 拼接一下,用 | 分隔符
    End If
   End if
   set file=nothing
  Next 
  Response.Clear()
       
        '=========最后做数据库操作
        Dim sql
        Dim rs
       
        sql = "select * from tableName"
        set rs=server.CreateObject("adodb.recordset")
        rs.Open sql,conn,3,3
        rs("qFilePath") = strArrayFileName 
  rs.Update
       
    %>
/*** End 新增操作 ****/

/*** start 修改操作 ****/
前台主要代码

//用一个隐藏按钮,保持原有的 文件名拼接字符串
<input name="txtOldAffix" type="hidden" id="txtOldAffix" value="<%=rsRecord_ById("theFilePath")%>">

//显示上传的所有 文件
<table width="95%" border="0">
<%
    strArrayFileName = rsRecord_ById("qFilePath")
    arrayFileName = Split(strArrayFileName,"|")
    maxBound=Ubound(arrayFileName) '默认数组长度
    kNub = 1
    For i=0 to maxBound
        If arrayFileName(i) = "" Then
            displayState = "none;"
        Else
            displayState = ""
        End If
%>
  <tr id="trFile<%=i%>" style="display:<%=displayState%>">                
 <td> ■&nbsp;&nbsp;<a target="_blank" href="upload/<%=arrayFileName(i)%>"><%=arrayFileName(i)%></a> <br></td>
 <td>&nbsp;&nbsp;<a href="#" onClick="DeleteOldFile('<%=(i)%>','trFile<%=i%>')" title="Delete" >&nbsp; X &nbsp;</a></td>
  </tr>
<%
 kNub = kNub + 1
 Next      
%>
</table>

 <script lanuage="javascript"> 
 var strOldFile = document.myform.txtOldAffix.value.split("|");
 function DeleteOldFile(index,trId) //点击X,隐藏当前行的 文件信息
 {  
  strOldFile[index] = "";     
  //document.myform.txtTemp2.value = strOldFile;
  document.myform.txtOldAffix.value = strOldFile;
  
  var objHref = document.getElementById(trId);
  objHref.style.display = "none";
 }
</script>

后台代码
rsWorkIntro("qFilePath") = Replace(upload.form("txtOldAffix"), ",", "|") & strArrayFileName

 

================
 upload_5xsoft.inc 代码如下
 
 <SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT CODEPAGE=936>
dim oUpFileStream,time1

Class upload_5xSoft
 
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.93"
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)

'Response.Write  "<font size=""2"">times:"&FormatNumber((Timer() -time1)*1000,3)&"毫秒</font><br>"
Response.Write  "<font size=""2"">times:"&FormatNumber((Timer() -time1)*1000,3)&"mSeconds</font><br>"
Response.Write  "<font size=""2""><a href='upload.htm'>upload</a> "

oUpFileStream.Position=0
RequestBinDate =oUpFileStream.Read
iFormStart = 1
iFormEnd = LenB(RequestBinDate)
bCrLf = chrB(13) & chrB(10)
sStart = MidB(RequestBinDate,1, InStrB(iFormStart,RequestBinDate,bCrLf)-1)
iStart = LenB (sStart)
iFormStart=iFormStart+iStart+1
while (iFormStart + 10) < iFormEnd
 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)
 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)
  '取得文件类型
  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 -3
  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-3
  tStream.Position = 0
  tStream.Type = 2
  tStream.Charset ="gb2312"
  sFormvalue = tStream.ReadText
  form.Add sFormName,sFormvalue
 end if
 tStream.Close
 iFormStart=iFormStart+iStart+1
 wend
RequestBinDate=""
set tStream =nothing
End Sub

Private Sub Class_Terminate 
if not Request.TotalBytes<1 then
 form.RemoveAll
 file.RemoveAll
 set form=nothing
 set file=nothing
 oUpFileStream.Close
 set oUpFileStream =nothing
  end if
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

End Class

Class FileInfo
  dim FormName,FileName,FilePath,FileSize,FileType,FileStart
  Private Sub Class_Initialize
    FileName = ""
    FilePath = ""
    FileSize = 0
    FileStart= 0
    FormName = ""
    FileType = ""
  End Sub
 
 Public function SaveAs(FullPath)
    dim oFileStream,ErrorChar,i
    SaveAs=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
    SaveAs=0
  end function
End Class
</SCRIPT>


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值