📄 upload_class.asp
字号:
<%
'=========================================================
' 类名: UpLoad
' 作者: Anlige
' 版本: AnUpload无组件上传类1.0
' 开发日期: 2008-6-12
' 网址: http://blog.ii-home.cn
' Email: zhanghuiguoanlige@126.com
' QQ: 417833272
' 备注:请查看例子学习其使用方法
'=========================================================
Class UpLoad
Public forms,files
Dim stream,vMaxSize,vErr,vPath,vVersion,vNameType,TotalSize,vExe,newname
Public Property Let MaxSize(value)
vMaxSize=value
End Property
Public Property Let Exe(value)
vExe=LCase(value)
End Property
Public Property Get Err()
Err=vErr
End Property
Public Property Get Description()
Description=GetErr(vErr)
End Property
Public Property Get Version()
Version=vVersion
End Property
Public Property Let Path(value)
vPath=value
End Property
Public Property Let NameType(value)
vNameType=value
End Property
Public Property Get Path()
Path=vPath
End Property
Private Sub Class_Initialize
set forms=server.createobject("Scripting.Dictionary")
set files=server.createobject("Scripting.Dictionary")
set stream=server.createobject("adodb.stream")
vVersion="Anlige无组件上传1.0"
vMaxSize=-1
vErr=-1
vPath=""
vExe=""
vNameType="auto"
End Sub
Private Sub Class_Terminate
set forms=nothing
set files=nothing
stream.close
set stream=nothing
End Sub
Public Sub GetData(dbdata) '获取数据的主函数
dim value,str
TotalSize=0
if vPath="" then '判断是否设置了上传路径
vErr=2
Exit Sub
else
if Right(vPath,1)<>"/" and Right(vPath,1)<>"\" then vPath=vPath&"/"
end if
stream.type=1
stream.mode=3
stream.open
stream.write dbdata
stream.position=0
tempdata=stream.read
bcrlf=chrb(13)&chrb(10)
fpos=instrb(1,tempdata,bcrlf)
sSplit=midb(tempdata,1,fpos-1)
slen=lenb(ssplit)
istart=slen+2
do
'取得form表项头
formend=instrb(istart,tempdata,bcrlf&bcrlf)
formhead=midb(tempdata,istart,formend-istart)
str=bytes2str(formhead)
startpos=instr(str,"name=""")+6
endpos=instr(startpos,str,"""")
FormName=mid(str,startpos,endpos-startpos)
if instr(str,"filename=""")>0 then
startpos=instr(str,"filename=""")+10
endpos=instr(startpos,str,"""")
filename=mid(str,startpos,endpos-startpos)
filename=mid(filename,instrrev(filename,"\")+1)
fileExe=split(filename,".")(1)
if vExe<>"" and instr(vExe,LCase(fileExe))>0 then '判断扩展名
vErr=-1
else
vErr=3
exit sub
end if
valueend=instrb(formend+3,tempdata,sSplit)
Randomize()
newname=now()
newname=replace(newname," ","")
newname=replace(newname,".","")
newname=replace(newname,":","")
newname=replace(newname,"-","")
newname=replace(newname,"上午","am")
newname=replace(newname,"下午","pm")
newname=newname&"-"&cstr(int(Rnd()*10))&"."&fileExe
if vNameType="file" then newname=filename
files.add newname,(formend+3)&"|"&(valueend-formend-6)
TotalSize=TotalSize+valueend-formend-6
if vMaxSize>0 and TotalSize>vMaxSize then '判断上传数据大小
vErr=1
exit sub
end if
else
valueend=instrb(formend+3,tempdata,sSplit)
value=midb(tempdata,formend+4,valueend-formend-6)
forms.add FormName,bytes2str(value)
end if
istart=valueend+2+slen
loop until (istart+2)>=lenb(tempdata)
vErr=0
End Sub
'-------------------保存文件
Public Function SaveToFile(Pos,Size,FName)
dim mystream
set mystream=server.createobject("adodb.stream")
mystream.type=1
mystream.mode=3
mystream.open
stream.position=Pos
stream.CopyTo mystream,Size
mystream.savetofile vPath&FName,2
mystream.close
set mystream=nothing
End Function
'-------------------获取文件大小
Public Function getsize(size)
if size<1024 then
getsize=formatnumber(size,2)&"B"
elseif size>=1024 and size<1048576 then
getsize=formatnumber(size/1024,2)&"KB"
elseif size>=1048576 then
getsize=formatnumber((size/1024)/1024,2)&"MB"
end if
End Function
'-------------------二进制数据转换为字符
Private Function bytes2str(byt)
if lenb(byt)=0 then
bytes2str=""
exit function
end if
dim mystream
set mystream=server.createobject("adodb.stream")
mystream.type=2
mystream.mode=3
mystream.open
mystream.writetext byt
mystream.position=0
mystream.charset="gb2312"
mystream.position=2
bstr=mystream.readtext()
mystream.close
set mystream=nothing
bytes2str=bstr
End Function
'-------------------获取错误描述
Private Function GetErr(num)
select case num
case 0
GetErr="数据处理完毕!准备保存..."
case 1
GetErr="上传数据超过"&getsize(vMaxSize)&"限制!可设置MaxSize属性来改变限制!"
case 2
GetErr="未设置上传路径Path属性!"
case 3
GetErr="含有非法扩展名文件!只能上传扩展名为"&vExe&"的文件"
end select
End Function
End Class
%>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -