[摘要]'##################################################################### '备注:我没有验证,提供给大家一种参考!...
'##################################################################### 
'备注:我没有验证,提供给大家一种参考!请大家自行验证 
'欢迎大家发表你认为好的精彩程序代码 
'大风(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>  
</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中华网如要转载请务必注明出处,谢谢  
关键词:DUDU的无组件上传例程