ASP中怎样实现文件上传.doc

//此为转贴//  
   
   
  1
。数据库表结构(Access)  
  UserID:Text(
保存上传文件的用户ID)  
  FileContentType:Text(
用来保存上传文件的类型,eg:"Application/msword",主要用来使用户能正确下载此文件)  
  FileContent:OLE   Object
(保存文件数据)  
   
  2
HTML文件  
  muploadfile.htm  
  <Form   name="upload_file"   enctype="multipart/form-data"   action="muploadfile.asp"   method=post>  
  <input   type=hidden   name="UserID"   value="abc">  
  <input   type=hidden   name="FileUploadStart">   '
这里用来表示开始文件数据上传  
  File   to   send:   <BR>  
  <INPUT   TYPE="file"   name="file_up"   size="30"><br>  
  <INPUT   TYPE="file"   name="file_up"   size="30"><br>  
  <input   type=hidden   name="FileUploadEnd">   '
这里用来表示文件数据结束  
  <input   type=submit   value=Submit>  
  </Form>  
   
  3
ASP文件  
  muploadfile.asp  
   
  <%  
  Response.Expires=0  
  Function   bin2str(binstr)    
          Dim   varlen,clow,ccc,skipflag    
   
          skipflag=0    
          ccc   =   ""    
          If   Not   IsNull(binstr)   Then    
                  varlen=LenB(binstr)    
                  For   i=1   To   varlen    
                          If   skipflag=0   Then    
                                  clow   =   MidB(binstr,i,1)  
                                  If   AscB(clow)   >   127   Then    
                                          ccc   =ccc   &   Chr(AscW(MidB(binstr,i+1,1)   &   clow))    
                                          skipflag=1    
                                  Else    
                                          ccc   =   ccc   &   Chr(AscB(clow))    
                                  End   If    
                          Else    
                                  skipflag=0    
                          End   If    
                  Next    
          End   If    
          bin2str   =   ccc    
  End   Function    
   
   
  varByteCount   =   Request.TotalBytes  
  bnCRLF   =   chrB(   13   )   &   chrB(   10   )  
  binHTTPHeader=Request.BinaryRead(varByteCount)                  
  Divider   =   LEFTB(   binHTTPHeader,     INSTRB(   binHTTPHeader,   bnCRLF   )   -   1   )  
   
  '
开始读非文件域的数据  
  Do   while   lenB(binHTTPHeader)>46  
           
          binHeaderData   =   LeftB(binHTTPHeader,   INSTRB(   binHTTPHeader,   bnCRLF   &   bnCRLF   )-1)  
          strHeaderData=bin2str(binHeaderData)  
   
          lngFieldNameStart=Instr(strHeaderData,"name="&chr(34))+Len("name="&chr(34))  
          lngFieldNameEnd=Instr(lngFieldNameStart,strHeaderData,chr(34))  
           
           
          strFieldName=Mid(strHeaderData,lngFieldNameStart,lngFieldNameEnd-lngFieldNameStart)  
          strFieldName=Trim(strFieldName)  
          strFieldName=Replace(strFieldName,vbcrlf,vbnullstring)  
           
                  '
判断文件数据时候开始  
          If   strComp(strFieldName,"FileUploadStart",1)=0   Then  
                  binHTTPHeader=MIDB(binHTTPHeader,INSTRB(   DataStart   +   1,   binHTTPHeader,   divider   ))  
                  exit   do  
          End   if  
           
          DataStart   =   INSTRB(   binHTTPHeader,   bnCRLF   &   bnCRLF   )   +   4    
          DataEnd   =   INSTRB(   DataStart   +   1,   binHTTPHeader,   divider   )   -   DataStart  
   
          binFieldValue=MIDB(   binHTTPHeader,   DataStart,   DataEnd   )  
          strFieldValue=bin2str(binFieldValue)  
          strFieldValue=Trim(strFieldValue)  
          strFieldValue=Replace(strFieldValue,vbcrlf,vbnullstring)  
   
          '
非文件上传域变量赋值  
          execute   strFieldName&"="""&strFieldValue&""""  
           
                   
          binHTTPHeader=MIDB(binHTTPHeader,INSTRB(   DataStart   +   1,   binHTTPHeader,   divider   ))  
                   
  loop  
   
  '
开始处理文件数据  
  Do   while   lenB(binHTTPHeader)>46  
           
           
          binHeaderData   =   LeftB(binHTTPHeader,   INSTRB(   binHTTPHeader,   bnCRLF   &   bnCRLF   )-1)  
                   
          strHeaderData=bin2str(binHeaderData)  
           
          '
读取上传文件的Content-Type  
          lngFileContentTypeStart=Instr(strHeaderData,"Content-Type:")+Len("Content-Type:")  
          strFileContentType=Trim(Mid(strHeaderData,lngFileContentTypeStart))  
          strFileContentType=Replace(strFileContentType,vbCRLF,vbNullString)  
           
          '
读取上传的文件名  
          lngFileNameStart=Instr(strHeaderData,"filename="&chr(34))+Len("filename="&chr(34))  
          lngFileNameEnd=Instr(lngFileNameStart,strHeaderData,chr(34))  
          strFileName=Mid(strHeaderData,lngFileNameStart,lngFileNameEnd-lngFileNameStart)  
          strFileName=Trim(strFileName)  
          strFileName=Replace(strFileName,vbCRLF,vbNullString)  
           
          '
读取上传文件数据  
          DataStart   =   INSTRB(   binHTTPHeader,   bnCRLF   &   bnCRLF   )   +   4    
          DataEnd   =   INSTRB(   DataStart   +   1,   binHTTPHeader,   divider   )   -   DataStart  
           
          If   strFileName<>""   Then  
                                   
                  binFieldValue=MIDB(   binHTTPHeader,   DataStart,   DataEnd   )  
                   
                  '
将上传的文件写入数据库  
                  set   conn   =   Server.CreateObject("ADODB.Connection")  
                  conn.Open   "DSN=abc"  
                   
                  SQL="select   *   from   User_File"  
                  set   rs=server.CreateObject("ADODB.Recordset")  
                  rs.Open   sql,conn,3,3  
                  rs.addnew  
                  rs("UserID")=UserID  
                  rs("FileContentType")=strFileContentType  
                  rs("FileContent").AppendChunk   binFieldValue  
                  rs.update  
                  rs.close  
                  set   rs=Nothing  
                  conn.Close  
                  set   conn=Nothing  
                   
          End   if  
           
          binHTTPHeader=MIDB(binHTTPHeader,INSTRB(   DataStart   +   1,   binHTTPHeader,   divider   ))  
           
  loop  
  %>  
   
  4
。下载用户上传的文件  
  <%  
  Response.Buffer             =   true  
  Response.Clear  
   
  UserID=request("UserID")  
   
  Set   conn=server.createobject("adodb.connection")  
  set   rs=server.createobject("adodb.recordset")  
  conn.open   "DSN=UploadFile"  
  rs.open   "select   *   from   User_File   where   UserID='"&UserID&"'",conn,3,3  
  Response.ContentType   =   rs("FileContentType")  
   
  lngOffset=0  
  conChunkSize=1024  
  lngPictSize=rs("FileContent").ActualSize  
  Do   While   lngOffset   <   lngPictSize  
      varChunk   =   rs("FileContent").GetChunk(conChunkSize)  
      Response.BinaryWrite   varChunk  
      lngOffset   =   lngOffset   +   conChunkSize  
      If   lngOffset   >   lngPictSize   Then   Exit   Do  
  Loop  
   
  rs.close  
  set   rs=Nothing  
  conn.close  
  set   conn=nothing  
  %>  
   
 
就是这些了,希望此方法对大家能有所帮助。:)    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值