[原创]一段上传.txt文件的代码(附详细注释)
<%
Dim Data,TotalSize,Datastr,Dstart,FileName,Bstart,B,Bend,PostData,C,Fstart,Fstr,Fend
TotalSize=Request.TotalBytes
Data=Request.BinaryRead(TotalSize)
set mystream=Server.CreateObject("ADODB.Stream")
mystream.Type=1 '1为二进制流
mystream.open
mystream.position=0
'-------------------------------------------
'读取二进制流
'-------------------------------------------
mystream.write(Data)
'-------------------------------------------
'转换成文本流
'-------------------------------------------
mystream.position=0 '------在改变模式的必须声明,否则报错
mystream.Type=2 '---------2为文本
mystream.charset="gb2312" '在Type=2的时候,须声明charset
Datastr=mystream.ReadText '
mystream.close
set mystream=nothing
'-------------------------------------------
'对文本流进行分离,分离出有效的上传数据
'-------------------------------------------
Dstart=InStr(Datastr,"text/plain")
Bstart=InStr(Datastr,"Content-Disposition")
C=chr(13)&chr(10) '-------------------------------换行符
B=Mid(Datastr,1,InStr(Datastr,C)-1) '-------------得到上传开始标识
Bend=Int(InStrRev(Datastr,B)) '-------------------得到上传结束标识的位置
lendata=Bend-Dstart '-----------------------------得到数据的长度
PostData=Mid(Datastr,Dstart,lendata) '------------得到有效的上传数据
PostData=Replace(PostData,"text/plain"&C&C,"") '--过滤掉两个换行字符
'------------------------------------------
'PostData就是我们分离出的有效的上传数据
'下面我们就用SavaToFile的方法把得到的有效的数据存到硬盘上
'------------------------------------------
set stream=Server.CreateObject("ADODB.Stream")
stream.Type=2
stream.mode=3
stream.open
stream.position=0
stream.writeText PostData,0 '--当stream对象的Type=2的时候,向它装入新的数据的时候须用[WriteText 数据,模式(0/1)]的方法
stream.position=0
stream.Type=1 '---------------以二进制流写文件速度上快
randomize
FileName=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&Int(rnd*10000+9000)&".txt" '得到随机文件名
stream.SaveToFile "D:\mp3\"&FileName,2 '可用Server.mappath("当前文件的名称")获取当前的服务器路径
stream.close
set stream=nothing
Response.Write("<script language='JavaScript'>alert('文件:"&FileName&"\n\n已经保存到:D:/mp3/"&FileName&"');</script>")
%>
Dim Data,TotalSize,Datastr,Dstart,FileName,Bstart,B,Bend,PostData,C,Fstart,Fstr,Fend
TotalSize=Request.TotalBytes
Data=Request.BinaryRead(TotalSize)
set mystream=Server.CreateObject("ADODB.Stream")
mystream.Type=1 '1为二进制流
mystream.open
mystream.position=0
'-------------------------------------------
'读取二进制流
'-------------------------------------------
mystream.write(Data)
'-------------------------------------------
'转换成文本流
'-------------------------------------------
mystream.position=0 '------在改变模式的必须声明,否则报错
mystream.Type=2 '---------2为文本
mystream.charset="gb2312" '在Type=2的时候,须声明charset
Datastr=mystream.ReadText '
mystream.close
set mystream=nothing
'-------------------------------------------
'对文本流进行分离,分离出有效的上传数据
'-------------------------------------------
Dstart=InStr(Datastr,"text/plain")
Bstart=InStr(Datastr,"Content-Disposition")
C=chr(13)&chr(10) '-------------------------------换行符
B=Mid(Datastr,1,InStr(Datastr,C)-1) '-------------得到上传开始标识
Bend=Int(InStrRev(Datastr,B)) '-------------------得到上传结束标识的位置
lendata=Bend-Dstart '-----------------------------得到数据的长度
PostData=Mid(Datastr,Dstart,lendata) '------------得到有效的上传数据
PostData=Replace(PostData,"text/plain"&C&C,"") '--过滤掉两个换行字符
'------------------------------------------
'PostData就是我们分离出的有效的上传数据
'下面我们就用SavaToFile的方法把得到的有效的数据存到硬盘上
'------------------------------------------
set stream=Server.CreateObject("ADODB.Stream")
stream.Type=2
stream.mode=3
stream.open
stream.position=0
stream.writeText PostData,0 '--当stream对象的Type=2的时候,向它装入新的数据的时候须用[WriteText 数据,模式(0/1)]的方法
stream.position=0
stream.Type=1 '---------------以二进制流写文件速度上快
randomize
FileName=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&Int(rnd*10000+9000)&".txt" '得到随机文件名
stream.SaveToFile "D:\mp3\"&FileName,2 '可用Server.mappath("当前文件的名称")获取当前的服务器路径
stream.close
set stream=nothing
Response.Write("<script language='JavaScript'>alert('文件:"&FileName&"\n\n已经保存到:D:/mp3/"&FileName&"');</script>")
%>
以上是自己在看stream对象的时候自己写的一点小代码,功能简单,只能上传.txt文件
上传其它类型的文件的时候就会报错,不知道其它类型的文件上传的时候是怎么分离出有效的数据的.
如果哪位大虾有时间的话可以教偶一下,先谢了.