经常有些网友在做asp程序的时候需要做文件上传程序,
用的最多的就是稻香老农的无组件上传组件吧。
可是在今年8月份左右,瑞星竟然报他是病毒,
连服务器上的也无一幸免啊,后来我就决顶自己搞一个。
在研究了稻香老农的无组件上传组件后,发先这里面主要使用了一个ADODB.Stream组件,在仔细研究了这个类后,我用了较少的代码
实现了一个,核心代码如下:
‘建立一个adodb.stream对象获取Post来的数据。
set ReadData = Server.CreateObject("adodb.stream")
ReadData.Type =1
ReadData.Mode =3
ReadData.Open
ReadData.Write Request.BinaryRead(Request.TotalBytes)
ReadData.Position=0
‘移到AllData中去
AllData=ReadData.Read
‘根据http post格式抽取有用数据,datastart为开始位置dataend为结束位置
bncrlf=chrB(13) & chrB(10)
divider=leftB(AllData,clng(instrb(AllData,bncrlf))-1)
datastart=instrb(AllData,bncrlf&bncrlf)+4
dataend=instrb(datastart+1,AllData,divider)-datastart
‘建立输出流正式抽取数据放到OutData中去
Set OutData = Server.CreateObject("ADODB.Stream")
OutData.Type = 1
OutData.Open
ReadData.Position = datastart-1
ReadData.CopyTo OutData,dataend-2
‘建立FInfoData用来提取文件信息流
set FInfoData=Server.CreateObject("ADODB.Stream")
FInfoData.Type = 1
FInfoData.Mode =3
FInfoData.Open
ReadData.Position =0
ReadData.CopyTo FInfoData,datastart-1
ReadData.Close
set ReadData=Nothing
‘用gb2312编码方式放入StrInfo
FInfoData.Position = 0
FInfoData.Type = 2
FInfoData.Charset ="gb2312"
StrFInfo=FInfoData.ReadText
FInfoData.Close
set FInfoData=Nothing
’取地文件名
Nstart=Instr(1,StrFInfo,"filename=""",1)+10
Nend=Instr(Nstart,StrFInfo,"""",1)
FileName=Mid(StrFInfo,Nstart,Nend-Nstart)
FileName=getFileName(FileName)
ExtName=getExtName(FileName)
‘保存已经取得的文件
OutData.SaveToFile Server.MapPath(IDmaker&"."&ExtName),2
OutData.Close
set OutData=Nothing