⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 upload_class.asp

📁 无组件上传
💻 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 + -