asp无组件上传某个地方不懂
先看代码,问题在下面<%'随机命名
function randomname(hzname)
Dim sRnd
Randomize
sRnd = Int(900 * Rnd) + 100
randomname=year(now())&month(now())&day(now())&hour(now()) & minute(now()) & second(now())&sRnd&"."&hzname
end function
%>
</head>
<body>
<%'读取表单信息
'初始化
dim enter,lag,laglen,data,datalen,mdata,mst,msts,mste,sst,ssts,sste,updict,hzname,sdata,oldmname,filename'定义一组变量
set updict=server.CreateObject("Scripting.Dictionary")'创建dictionary对象,用于储存上传后文件的信息
set mst=server.CreateObject("ADODB.Stream")'创建主Stream对象
set sst=server.CreateObject("ADODB.Stream")'创建子Stream对象
enter=chrB(13) & chrB(10)'回车符
mst.type=1'初始化主Stream对象
mst.mode=3
mst.open'打开主Stream对象
mst.write request.BinaryRead(request.TotalBytes)'将表单中的数据传入主Stream对象
mst.position=0'设置主Stream对象的读取初始位置为开头
data=mst.read '读取所有数据存入data变量
datalen=mst.size '获取数据大小
laglen=instrB(data,enter)+1 '标志字符串的长度(包括回车)
lag=leftB(data,laglen-2)'获取标志字符串(包括回车)
msts=laglen '将开始点设置到数据属性段的最前位置
do '循环开始
mste=instrB(msts,data,enter&enter)+3 '设置结束点
sst.type=1'初始化子Stream对象
sst.mode=3
sst.open '打开子STREAM对象
mst.position=msts '将主Stream数据读取初始位置设置为Msts处
mst.copyto sst,mste-msts '将截取的数据写入副STREAM对象
msts=mste '设置下一个开始点
mste=instrB(msts,data,lag)-3 '设置下一个结束点
sst.position=0 '将子Stream数据读取初始位置设置为开头
sst.type=2 '改变子Stream的类型
sst.charset="gb2312"'设置编码
sdata=sst.readtext '以文本方式读取子STREAM,并存入sdata
ssts=instr(sdata,"filename=""")+10 '在子Stream对象中查找filename=" ,并加上其本身的长度
sste=instrrev(sdata,"""")'在子Stream对象中查找“ ,并加上其本身的长度
oldname=mid(sdata,ssts,sste-ssts)'取得原文件名
hzname=mid(oldname,instr(oldname,".")+1,len(oldname)-instr(oldname,".")) '取得后缀名
sst.close '关闭子Stream
sst.type=1 '重新初始化子Stream
sst.mode=3
sst.open'打开子Stream
mst.position=msts'设置主Stream读取位置
mst.copyto sst,mste-msts'将文件数据从主Stream复制到子Stream
if sst.size>0 then'判断文件内容是否为空,不为空则执行下面部分
filename=randomname(hzname)
sst.savetofile server.MapPath("upfiles")& "\" &filename,2 '存储文件至Upfiles文件夹中并重命名文件
updict.add filename,filename '把文件信息添加入Dictionary对象
end if
sst.close
msts=mste
loop while msts+laglen+4<datalen '读取结束的条件
if updict.count=0 then '判断是否有上传文件
response.Write("没有选择任何文件!")
else
for each filename in updict
response.write(updict(filename))
next
end if
'释放实例
mst.close
set updict=nothing
set mst=nothing
set sst=nothing
%>
这个是在网上找到的ASP无组件上传代码的讲解,有个地方不懂
在第25,26行
laglen=instrB(data,enter)+1 '标志字符串的长度(包括回车)
lag=leftB(data,laglen-2)'获取标志字符串(包括回车)
laglen=instrB(data,enter)+1 这里加的1是chrB(13) & chrB(10)回车符的长度么,对的吧
可是lag=leftB(data,laglen-2)这里为什么要减二呢,减了之后不是把回车符剪掉了么,还把标志字符串也减了一位
第一次发帖子,注册用户要输入五次验证码,呵呵,第一次见到,很喜欢这个论坛,这个才是技术讨论论坛啊