深圳升蓝软件
数据库开发 .Net技术  |  ASP技术 PHP技术 JSP技术 应用技术类   
Hiblue Software

DUDU的无组件上传例程


March 25,2004
'#####################################################################
'备注:我没有验证,提供给大家一种参考!请大家自行验证
'欢迎大家发表你认为好的精彩程序代码
'大风(xuankong)  2000。12。8
'#####################################################################
标题:还是用我的无组件文件上载吧,与ASPCN组件有异曲同工之妙,下面是例程:   
作者:DUDU(DUSJ)   
时间:2000-12-7  上午  09:48:00   
阅读次数:8   
详细信息:   
-----------------------------   
表单填写页的内容:   
-----------------------------   
<html>   
<head>   
<meta  name="Author"  content="Sander  Duivestein">   
<meta  http-equiv="Content-Type"  content="text/html;  charset=gb2312">   
<meta  name="GENERATOR"  content="Microsoft  FrontPage  4.0">   
<meta  name="ProgId"  content="FrontPage.Editor.Document">   
<title>将本地的文件上载到数据库</title>   
</head>   
<body>   
<font  size="2"  size="2"><br>   
</font>   
<form  name="frmUpload"  method="post"  enctype="multipart/form-data"  action="Upload.asp">   
   <table  cellspacing="0"  cellpadding="0"  width="490">   
       <tr>   
           <td  width="167">   
               <p  align="right"><font  size="2"  size="2">请选择文件:</font></p>   
           </td>   
           <td  width="319"><font  size="2"  size="2"><input  type="file"  name="vFileName"></font></td>   
       </tr>   
       <tr>   
           <td  align="right"  width="167"><font  size="2"  size="2">文件说明1:</font></td>   
           <td  width="319"><input  name="shuoming"  size="32"  ></font></td>   
       </tr>   
       <tr>   
           <td  align="right"  width="167"><font  size="2"  size="2">文件说明2:</font></td>   
           <td  width="319"><input  name="shuoming_2"  size="32"  onchange="isdate1(document.frmUpload.dengji)"  </td>   
       </tr>   
           <td  width="167"></td>   
           <td  width="319">   
               <p  align="left"><font  size="2"  size="1"><input  type="submit"      style="background-image:  url('images/back.jpg');  cursor:  hand;  font-sizd:  smaller;  left:  0px;  width:  94;  top:  5px;  height:  25"      value="  上  载  "  style="background-image:  url('images/back.jpg');  cursor:  hand;  font-sizd:  smaller;  left:  0px;  width:  94;  top:  5px;  height:  25"  size="23"  ></font></p>   
           </td>   
       <tr>   
           <td  colspan="2"  align="right"  width="487"></td>   
       </tr>   
   </table>   
</form>   
</body>   

</html>   

----------------------------------   
Upload.asp的内容:   
----------------------------------   
<%   
Response.Buffer  =  TRUE   
Response.Clear   
byteCount  =  Request.TotalBytes   
RequestBin  =  Request.BinaryRead(byteCount)   
'response.binarywrite  requestbin   
'取得表单的全部内容   
'''''''''''''''''''''''''''''''''''''''''''''''''''''''   
Dim  UploadRequest   
Set  UploadRequest  =  CreateObject("Scripting.Dictionary")   
'  UploadRequest结构将用来存放表单   

PosBeg  =  1   
PosEnd  =  InstrB(PosBeg,RequestBin,StoB(chr(13)))   
boundary  =  MidB(RequestBin,PosBeg,PosEnd-PosBeg)   
'求字段间的分隔串(即:-----------------------------7d029e347d8  )   
boundaryPos  =  InstrB(1,RequestBin,boundary)   

Do  until  (boundaryPos=InstrB(RequestBin,boundary  &  StoB("--")))   
'Members  variable  of  objects  are  put  in  a  dictionary  object   
Dim  UploadControl   
Set  UploadControl  =  CreateObject("Scripting.Dictionary")   
'Get  an  object  name   
Pos  =  InstrB(BoundaryPos,RequestBin,StoB("Content-Disposition"))   
Pos  =  InstrB(Pos,RequestBin,StoB("name="))   
PosBeg  =  Pos+6   
PosEnd  =  InstrB(PosBeg,RequestBin,StoB(chr(34)))   
Name  =  BtoS(MidB(RequestBin,PosBeg,PosEnd-PosBeg))   
PosFile  =  InstrB(BoundaryPos,RequestBin,StoB("filename="))   
PosBound  =  InstrB(PosEnd,RequestBin,boundary)   
'  response.write  "<hr>"   
'  response.write  "name="&name&"<BR>"   
'    name为表单项的名字   
'Test  if  object  is  of  file  type   
If    PosFile<>0  AND  (PosFile<PosBound)  Then   
PosBeg  =  PosFile  +  10   
PosEnd  =    InstrB(PosBeg,RequestBin,StoB(chr(34)))   
FileName  =  BtoS(MidB(RequestBin,PosBeg,PosEnd-PosBeg))   
'  response.write  "<BR>"   
'  response.write  "filename="&filename&"<BR>"   
'  filename为全路径文件名(如果是文件类型话)   
UploadControl.Add  "FileName",  FileName   
Pos  =  InstrB(PosEnd,RequestBin,StoB("Content-Type:"))   
PosBeg  =  Pos+14   
PosEnd  =  InstrB(PosBeg,RequestBin,StoB(chr(13)))   
ContentType  =  BtoS(MidB(RequestBin,PosBeg,PosEnd-PosBeg))   
UploadControl.Add  "ContentType",ContentType   
'  response.write  "filetype="&ContentType&"<BR>"   
'  response.write  "<BR>"   
PosBeg  =  PosEnd+4   
PosEnd  =  InstrB(PosBeg,RequestBin,boundary)-2   
Value  =  MidB(RequestBin,PosBeg,PosEnd-PosBeg)   
filesize  =  Posend  -  Posbeg   
UploadControl.Add  "FileSize",filesize   
'  response.write  "value="   
'  response.binarywrite  value   
'  response.write  "<BR>"   
Else   
Pos  =  InstrB(Pos,RequestBin,StoB(chr(13)))   
PosBeg  =  Pos+4   
PosEnd  =  InstrB(PosBeg,RequestBin,boundary)-2   
Value  =  BtoS(MidB(RequestBin,PosBeg,PosEnd-PosBeg))   
'  response.write  "value="&value&"<BR>"   
'  value为表单项的值,如果为文件项,则value为一长串二进制码   
End  If   

UploadControl.Add  "Value"  ,  Value   

UploadRequest.Add  name,  UploadControl   
'UploadRequest增加一个Key为name的项,此项的value仍是一个dixtionary对象   

BoundaryPos=InstrB(BoundaryPos+LenB(boundary),RequestBin,boundary)   

Loop   
''''''''''''''''''''''''''''''''''''''''''''''''''''''''   
contentType  =  UploadRequest.Item("vFileName").Item("ContentType")   
filesize  =    UploadRequest.Item("vFileName").Item("FileSize")   
filepathname  =  UploadRequest.Item("vFileName").Item("FileName")   
filename  =  Right(filepathname,Len(filepathname)-InstrRev(filepathname,""))   
filevalue  =  UploadRequest.Item("vFileName").Item("Value")   
shuoming  =  UploadRequest.Item("shuoming").Item("Value")   
shuoming_2  =  UploadRequest.Item("shuoming_2").Item("Value")   

'取出嵌套的dictionary对象的值,注意dictionary的Key区分大小写!!!   
''''''''''''处理数据库'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''   
set  connGraph  =  server.CreateObject("ADODB.connection")   
connGraph.ConnectionString  =  Application("DNS")   
connGraph.Open   
Set  DB  =  Server.CreateObject("ADODB.RecordSet")   
db.Open  "SELECT  *  FROM  t_recordnote  where  1<>1",connGraph,1,3   
db.addnew   
db("record").appendchunk  filevalue   
db("shuoming")  =  shuoming   
db("shuoming_2")  =  shuoming_2   
db("username")  =  session("username")   
db("filetype")  =  contentType   
db("time")  =  now()   
db("filename")  =  filename   
db("filesize")  =  filesize   
db.update   
db.close   
set  db  =  nothing   
response.write  "文件"&filename&"上载成功"   
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''   
Function  StoB(varStr)   
     str2bin  =  ""   
     For  i  =  1  To  Len(varstr)   
             varchar  =  Mid(varstr,  i,  1)   
             varasc  =  Asc(varchar)   
             '  asc对中文字符求出来的值可能为负数,   
             '  加上65536就可求出它的无符号数值   
             '  -1在机器内是用补码表示的0xffff,   
             '  其无符号值为65535,65535=-1+65536   
             '  其他负数依次类推。   
             If  varasc  <  0  Then   
                   varasc  =  varasc  +  65535   
             End  If   
             '对中文的处理:把双字节低位和高位分开   
             If  varasc  >  255  Then   
                   varlow  =  Left(Hex(Asc(varchar)),  2)   
                   varhigh  =  Right(Hex(Asc(varchar)),  2)   
                   str2bin  =  str2bin  &  ChrB("&H"  &  varlow)  &  ChrB("&H"  &  varhigh)   
             Else   
                   str2bin  =  str2bin  &  ChrB(AscB(varchar))   
             End  If   
     Next   
     StoB  =  str2bin   
End  Function   
'''''''''''''''''''''''''''''''''''''''''''''''''''''   
'Byte  string  to  string  conversion   
Function  BtoS(Binstr)   
     '中文字符Skip标志   
     skipflag  =  0   
     strC  =  ""   
     If  Not  IsNull(binstr)  Then   
           lnglen  =  LenB(binstr)   
           For  i  =  1  To  lnglen   
                   If  skipflag  =  0  Then   
                         tmpBin  =  MidB(binstr,  i,  1)   
                         '判断是否中文的字符   
                         If  AscB(tmpBin)  >  127  Then   
                               'AscW会把二进制的中文双字节字符高位和低位反转,所以要先把中文的高低位反转   
                               strC  =  strC  &  Chr(AscW(MidB(binstr,  i  +  1,  1)  &  tmpBin))   
                               skipflag  =  1   
                         Else   
                               strC  =  strC  &  Chr(AscB(tmpBin))   
                         End  If   
                   Else   
                         skipflag  =  0   
                   End  If   
           Next   
     End  If   
   BtoS  =  strC   
End  Function   
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''   
%>   


------------------------------   
表结构:   
------------------------------   
drop  TABLE  [t_RecordNote]     
CREATE  TABLE  [t_RecordNote]  (   
[RecordId]  [int]  IDENTITY  (1,  1)  NOT  NULL  ,   
[filename]  [varchar]  (60)  NULL  ,   
[filetype]  [varchar]  (40)  NULL  ,   
[UserName]  [varchar]  (30)  NULL  ,   
[Time]  [datetime]  NULL  ,   
[shuoming]  [varchar]  (200)  NULL  ,   
[shuoming_2]  [varchar]  (200)  NULL  ,   
[filesize]  [int]  NULL  ,   
[Record]  [image]  NULL  ,   
PRIMARY  KEY    CLUSTERED     
(   
[RecordId]   
)    ON  [PRIMARY]     
)   
GO   
  
  

本文章来自于http://www.aspcn.com   ASP中华网如要转载请务必注明出处,谢谢
       
Copyright © 2001-2008 Shenzhen Hiblue Software Team All rights reserved