asp一直以来备受小站长们的青睐,优于其使用简单,普及程度高,便于迅速建站而备受欢迎。但是asp文件上传一直没有得到很好的解决,尤其是诸多小站长不知如何用asp上传文件。网上四处搜寻上传组件,不是使用不方便,就是病毒木马漏洞一大堆,搞得小站长们郁闷无比。今天免费分享一个小冰冰原创的霸道给力,操作简单方便,便于灵活部署的asp上传文件程序,希望对广大asp爱好者以及asp小站长们有帮助。
以下内容可以单独保存为upload.asp,要在那个页面使用就直接引入。
例如:<!–#include file=”upload.asp”–>
<%
‘小冰冰asp文件上传插件
‘requestFormData简称rfd
function myleftb(mydata,datasize)’mylefb函数替代leftb,操作二进制流更安全。
dim ad
set ad=server.createobject(“adodb.stream”)
ad.type=1
ad.mode=3
ad.open
ad.write mydata
ad.position=0
myleftb=ad.read(datasize)
ad.close
end function
function myrightb(mydata,datasize)’myrightb替代rightb
dim ad
set ad=server.createobject(“adodb.stream”)
ad.type=1
ad.mode=3
ad.open
ad.write mydata
ad.position=lenb(mydata)-datasize
myrightb=ad.read(datasize)
ad.close
end function
‘查询字符第n词出现的位置
function scount(mydata,str,n)
dim datastart,m
datastart=1
m=0
do while instr(datastart,mydata,str)>0
m=m+1
if m=n then
scount=instr(datastart,mydata,str)
exit do
exit function
end if
datastart=instr(datastart,mydata,str)+len(str)
loop
if m<n then
scount=0
end if
end function
‘截取字节
function cutout(mydata,datastart,datasize)
dim ldata,rdata
ldata=myleftb(mydata,datastart-1)
rdata=myrightb(mydata,lenb(mydata)-lenb(ldata))
cutout=myleftb(rdata,datasize)
end function
‘字节保存为文件
sub btf(mydata,path)
dim ad
set ad=server.createobject(“adodb.stream”)
ad.type=1
ad.mode=3
ad.open
ad.write mydata
ad.position=0
ad.savetofile server.mappath(path),2
ad.close
set ad=nothing
end sub
‘查询字节第n次出现的位置
function bcount(mydata,str,n)
dim datastart,m
datastart=1
m=0
do while instrb(datastart,mydata,str)>0
m=m+1
if m=n then
bcount=instrb(datastart,mydata,str)
exit do
exit function
end if
datastart=instrb(datastart,mydata,str)+len(str)
loop
if m<n then
bcount=0
end if
end function
‘字节转字符
function bts(data)
dim ad
set ad=server.createobject(“adodb.stream”)
ad.type=2
ad.mode=3
ad.open
ad.writetext data
ad.position=0
ad.charset=”gb2312″
ad.position=2
bts=ad.readtext
ad.close
set ad=nothing
end function
‘查询字符出现的总次数
function checkcount(mydata,str)
if str=”” then
checkcount=0
exit function
end if
if str=null then
checkcount=0
exit function
end if
dim m,datastart
m=0
datastart=1
do while instr(datastart,mydata,str)>0
if instr(datastart,mydata,str)=0 then
exit do
end if
m=m+1
datastart=instr(datastart,mydata,str)+len(str)
loop
checkcount=m
end function
‘查询字节出现的次数
function checkcountb(mydata,str)
if lenb(str)=0 then
checkcountb=0
exit function
end if
dim m,datastart
m=0
datastart=1
do while instrb(datastart,mydata,str)>0
if instrb(datastart,mydata,str)=0 then
exit do
end if
m=m+1
datastart=instrb(datastart,mydata,str)+len(str)
loop
checkcountb=m
end function
sub rfd(formdata,myform)
dim hcf,fgf,n,datastart,dataend,datasize,tempdata,headdata,headdatastr,myarray,mytempdata,dd
if lenb(formdata)>0 then
hcf=chrB(13)&chrB(10)
fgf=myleftb(formdata,instrb(formdata,hcf)-1)
for n=1 to checkcountb(formdata,fgf)-1
‘分割formdata
datastart=bcount(formdata,fgf,n)+lenb(fgf)
dataend=bcount(formdata,fgf,n+1)-1
datasize=dataend-datastart+1
tempdata=cutout(formdata,datastart,datasize)
‘得到headdata
datastart=bcount(tempdata,hcf,1)+1
dataend=bcount(tempdata,hcf,2)-1
datasize=dataend-datastart+1
headdata=cutout(tempdata,datastart,datasize)
headdatastr=bts(headdata)
‘判断是文件还是字符
myarray=split(headdatastr,””””)
‘得到name,myarray(1)是name
if ubound(myarray)>3 then
‘是文件,myarray(3)是filename既文件名包括扩展名
‘截取文件字节
if len(myarray(3))=0 then’文件名不存在,说明没有选择上传的文件
myform.add myarray(1)&”_filedata”,””
myform.add myarray(1)&”_filename”,””
myform.add myarray(1)&”_format”,””
else
datastart=bcount(tempdata,hcf,4)+lenb(hcf)
datasize=lenb(tempdata)-datastart+1
mytempdata=cutout(tempdata,datastart,datasize)
myform.add myarray(1)&”_filedata”,mytempdata
myform.add myarray(1)&”_filename”,myarray(3)
dd=split(myarray(3),”.”)
myform.add myarray(1)&”_format”,dd(ubound(dd))’文件格式
end if
else
‘是字符
datastart=bcount(tempdata,hcf,3)+lenb(hcf)
datasize=lenb(tempdata)-datastart+1
mytempdata=cutout(tempdata,datastart,datasize)
if lenb(mytempdata)=2 then’说明没有填写表单内容
myform.add myarray(1)&”_str”,””
else
myform.add myarray(1)&”_str”,bts(mytempdata)
end if
end if
next
end if
end sub
%>
上传文件的表单页面index.asp或者自己随便弄个名字也行。
<%
‘引入upload.asp页面
%>
<!–#include file=”upload.asp”–>
<%
‘使用方法
formdata=request.binaryread(request.totalbytes)’接收字节流文件,可以不用formdata做变量名,根据喜好选择变量名
if lenb(formdata)>0 then’判断字节流文件长度,有字节流文件传过来就说明表单提交过来了。
set myform=server.createobject(“scripting.dictionary”)’创建一个字典对象,用来接收表单数据,myform是我取的名字,实际使用的时候自己随意定义一个变量,不一定非得是myform
call rfd(formdata,myform)’调用表单数据处理过程函数,这个过程函数会自动处理表单字节流,并自动保存在myform字典里面。rfd()过程函数意思是requestFormData,如果不喜欢这个名字,可以在upload.asp文件里面自己改一下。
‘重点说明:
‘myform.item(“[name]_str”)表示传过来的字符信息,比如input,textarea文本,没有则为空。
‘myform.item(“[name]_filename”)表示文件名字符,例如xxxx.mp4
‘myform.item(“[name]_filedata”)表示type=”file”的表单传过来的文件字节流,注意是字节信息,要保存为文件要调用upload.asp文件里的 btf(mytata,path)过程函数。
‘myform.item(“[name]_format”)里面保存的是文件的扩展名,注意不带”.”的扩展名,比如”jpg”
‘btf(mydata,path)’过程函数,把字节流保存为文件。
用法:call btf(,myform.item(“[name]_filedata”),”xxxx.mp4″)覆盖方式保存
‘[name]就是表单里面的name=”xxxxx”。html里面表单没有name是不能上传的哦。
‘这个上传文件的插件不涉及到判断文件大小,过滤敏感词汇,判断文件格式等功能。
‘1,判断文件大小的方法:lenb(myform.item(“[name]_filedata”))。
‘2过滤敏感词的方法 instr(myform.item(“[name]_str”),”敏感词”)
‘3判断文件格式的方法:instr(myform.item(“[name]_format”),”文件格式比如jpg”)
4’生成文件名的功能在本上传文件里面不涉及,实际上自己写一个就可以了。用“日期+随机数+扩展名”的方式就可以很容易生成不同的文件名。
‘例如:
if lenb(myform.item(“myfile_filedata”))>0 then’判断文件大小
call btf(myform.item(“myfile_filedata”),”xxxxxxxxxx.”&myform.item(“myfile_format”))’保存文件
end if
set myform=nothing’关闭字典对象,记得要关闭,养成好习惯。
response.write “<script>alert(‘ok’);self.location=document.referrer;</script>” ‘表单信息处理完毕,弹出ok,返回上一页并刷新,实际要怎么处理根据自己的需要来。
response.end
end if
‘下面是表单结构,实际的表单结构可以根据需要自己设计,实际上这个upload.asp上传文件可以对任意表单传过来的字节流信息做处理。
%>
<form enctype=”multipart/form-data” method=”post” name=”theform” action=”upload.asp”>
<input type=”file” name=”myfile”>
<input type=”text” name=”mytext”>
<input type=”submit” name=”submit” value=”提交”>
</form>
今天的文章asp文件上传分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/24600.html