您的位置:首页 > 编程语言 > ASP

shawl.qiu asp/vbscript 无组件上传类 v1.2

2007-01-19 18:59 519 查看

shawl.qiu asp/vbscript 无组件上传类 v1.2

下载原格式:
http://files.myopera.com/btbtd/vbscript/class/sqUpload_v1.2.7z

subject: shawl.qiu asp/vbscript 无组件上传类

version: v1.2

author: shawl.qiu

e-mail: shawl.qiu@gmail.com

blog: http://blog.csdn.net/btbtd

created: 2007-1-18

published: 2007-1-19

功能摘要:
支持 自定义上传多个文件

支持 中文文件名

支持 自定义上传总大小

支持 自定义上传每文件总大小

支持 自定义上传文件类型

支持 自定义上传间隔

支持 自定义是否重命名文件(在已存在相同名称的文件名时)

支持 自定义是否添加随机后缘

支持 自定义添加前缀

升级描述:
本次升级重写了大部分代码, 以更合理更OO的结构重写本程序, 提高了很多效率.
修正了 1.0 Final 中的一点小 bug.
备注: 1.1 版本没发布, 这大概会是鄙人的一个习惯, 1.1 版本 大多是在捉虫子, 因此鄙人的 1.1 大多数没发布

版权声明: 本程序允许非商业性的自由传播与应用, 商业使用者需经作者许可, 否则将追究法律责任.

class sqUpload 源代码:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>

<% option explicit %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<!-- DW6 -->

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>shawl.qiu template</title>

</head>

<body>

<%

dim up

set up=new sqUpload

up.debug=false '非必选, 调试时 设为 true

up.item=5 '必选项, 显示多少个上传文件域'

up.action="?id=ufile" '必选项, 上传提交路径

up.totalsize=1024*10 'kb' '必选项, 上传总大小

up.singlesize=1024 'kb '必选项, 上传每文件总大小

up.path="/uploads/" '必选项, 上传目录

'必选项, 允许上传的文件扩展类型

up.extension="7z,rar,zip,mp3,bmp,gif,jpg,jpeg,png,txt,swf,html,htm"

up.charset="utf-8" '必选项, 上传页编码

up.interval=30 '必选项, 每次上传间隔 单位: 秒

up.gobackSecond=10 '必选项, 上次完毕后返回时间 单位: 秒

up.gobackurl="?" '必选项, 上次完毕后返回路径, 单位: url

up.prefix="" '非必选, 上传前缀'

up.autorename=false '非必选, 是否自动重命名

up.rndpostfix=false '非必选, 是否添加随机后缀

up.ckeckfile=true '非必选, 是否检测恶意代码

'非必选, 要进行检测恶意代码的文件类型

up.listForCheck="jpg,gif,png,jpeg"

up.autoRenameOpt=true '非必选, 是否显示表单的自动重命名复选框

up.prefixOpt=true '非必选, 是否显示表单的自定义前缀文件框

up.rndPostfixOpt=true '非必选, 是否显示表单的随机后缀复选框

up.header '非必选, 程序头部信息

if Request.QueryString("id")="ufile" then

up.exec '必选项, 处理上传

up.report '必选项, 汇报上传后结果

'Response.write(up.filelist) '返回已上传的所有文件路径, 数据类型为字符串, 以逗号分隔'

end if

up.info '非必选, 显示上传限制信息

up.form '必选项, 显示上传表单

up.about '非必选, 显示作者及程序相关信息

up.footer '非必选, 显示程序底部信息

set up=nothing

'---------------------------------------------------------------------'

' shawl.qiu asp/vbscript 无组件上传类 v1.2

'---------------------------------------------------------------------'

'---------------------------------------------------------------------begin class sqUpload

class sqUpload

'------------------------------------begin event

private sub class_initialize()

auSubject="shawl.qiu asp/vbscript 无组件上传类"

auVersion="v1.2"

au="shawl.qiu"

auEmail="shawl.qiu@gmail.com"

auBlog="http://blog.csdn.net/btbtd"

auCreateDate="2007-1-18"

auPubDate="2007-1-19"

auUpDesc="本次升级重写了大部分代码, 以更合理更OO的结构重写本程序, 提高了很多效率."&_

"<br/>修正了 1.0 Final 中的一点小 bug."&_

"<br/>备注: 1.1 版本没发布, 这大概会是鄙人的一个习惯, 1.1 版本 大多是在捉虫子,"&_

" 因此鄙人的 1.1 大多数没发布"

'init public variable'

item=10

action="?id=ufile"

totalsize=1024*1024 'kb'

singlesize=1024 'kb'

path="/upload/"

extension="7z,rar,zip,mp3,bmp,gif,jpg,jpeg,png,txt,swf"

charset="utf-8"

filelist=""

interval=10

gobackSecond=10

gobackurl="?"

autoRenameOpt=false

prefixOpt=false

rndPostfixOpt=false

tl_totalfield=0

tl_totalfile=0

tl_totalnotfile=0

tl_finalupload=0

prefix=""

autorename=false

rndpostfix=false

ckeckfile=false

listForCheck=""

tl_bAllowUpload=true

wordAutoRename="自动重命名"

wordRndPostfix="随机后缀"

wordPrefix="添加前缀"

wordPrefixValue="prx_"

wordSubmit="现在上传文件?"

wordReset="现在重置?"

redim tl_arCkFl(4)

tl_arCkFl(0)=chrB(60)&chrB(37) '<%

tl_arCkFl(1)=chrB(37)&chrB(62) '%/>

tl_arCkFl(2)=chrB(115)&chrB(99)&chrB(114)&chrB(105)&chrB(112)&chrB(116)

tl_arCkFl(3)=chrB(83)&chrB(99)&chrB(114)&chrB(105)&chrB(112)&chrB(116)

tl_arCkFl(4)=chrB(83)&chrB(67)&chrB(82)&chrB(73)&chrB(80)&chrB(84)

debug=false

Response.write("<style type=""text/css"">"&vbcrlf)

Response.write("/* <![CDATA[ */"&vbcrlf)

Response.write(" .dspBl{ display:block;}"&vbcrlf)

Response.write(" .report * li{margin:5px 0px}"&vbcrlf)

Response.write(" .crRed{color:red}"&vbcrlf)

Response.write(" .crFcs{color:fuchsia}"&vbcrlf)

Response.write(" .ftBld{font-weight:bold;}"&vbcrlf)

Response.write(" .crHl{background:yellow; color:black;}"&vbcrlf)

Response.write(" .au_header { font-weight:bold; text-align: center; "&_

"color:bold; display:table; width:96%;"&vbcrlf)

Response.write(" font-size:28px; padding:%2; }"&vbcrlf)

Response.write(" .au_footer{text-align: center; display:table; width:98%; padding:%1; }"&_

vbcrlf)

Response.write(" hr{"&vbcrlf)

Response.write(" border-top: 1px dashed #FFFFFF!important;"&vbcrlf)

Response.write(" border-right: 1px dashed #FFFFFF!important;"&vbcrlf)

Response.write(" border-bottom:1px dashed black!important; "&vbcrlf)

Response.write(" border-left: 1px dashed #FFFFFF!important;"&vbcrlf)

Response.write(" margin:10px 0px;"&vbcrlf)

Response.write(" }"&vbcrlf)

Response.write("/* ]]> */"&vbcrlf)

Response.write("</style>")

end sub 'class_initialize'

private sub class_terminate()

end sub 'class_terminate'

'------------------------------------end event

'------------------------------------begin public variable

'---------------begin about

public auSubject, auVersion, au, auEmail, auBlog, auCreateDate, auPubDate, auUpDesc

'---------------end about

public item

public action

public totalsize

public singlesize

public path

public extension

public charset

public filelist

public interval

public gobackSecond

public gobackurl

public autoRenameOpt

public prefixOpt

public rndPostfixOpt

public prefix

public autorename

public rndpostfix

public ckeckfile

public listForCheck

public wordAutoRename

public wordRndPostfix

public wordPrefix

public wordSubmit

public wordReset

public wordPrefixValue

public debug

'------------------------------------end public variable

'------------------------------------begin public method

public property get form

form=fForm

end property

public property get exec

exec=fExec

end property

public property get info

info=fInfo

end property

public property get report

report=fReport

end property

public property get header

header=fHeader

end property

public property get footer

footer=fFooter

end property

public property get about

about=fAbout

end property

'------------------------------------end public method

'------------------------------------begin private variable

private tl_totalbytes

private tl_sizebykb

private tl_phspath

private tl_bAllowUpload

private tl_totalHeader

private tl_totalfield

private tl_totalfile

private tl_totalnotfile

private tl_finalupload

private tl_arCkFl

private tl_arErrNoExt

private tl_arErrNotAllowExt

private tl_arErrMaliceCode

private tl_arErrFileExists

private tl_arErrOversize

private tl_arErrOversizeDetail

private tl_arUploadList

private tl_arUploadDetail

private tl_arFinalName

'------------------------------------end private variable

'------------------------------------begin private method

private function fExec()

dim dtInterval

if session("timestamp")="" then session("timestamp")=now()

dtInterval=dateDiff("s",now(),session("timestamp"))

if dtInterval>0 then

call suErr1("每次上传的时间间隔为", "秒后才能继续上传, 请稍候...,","秒", "?",_

dtInterval, interval)

tl_bAllowUpload=false

exit function

else

session("timestamp")=dateAdd("s",interval,now())

end if

tl_totalbytes=Request.TotalBytes

'-----------------------------------检测是否有数据在上传'

if tl_totalbytes=0 then

call suErr("上传数据为空, 上传处理被中止,", "?", 3)

Response.End()

end if

tl_sizebykb=tl_totalbytes/1024

'-----------------------------------检测上传总大小是否超出限制'

if totalsize<tl_sizebykb then

dim sUpsize:

sUpsize="上传总大小为: "&formatNumber(tl_sizebykb)&" Kb, 超过总大小限制: "&_

totalsize&" kb, 约合 "&(totalsize/1024)&" mb, "

'Response.write(sUpsize)

call suErr( sUpsize, "?", 3)

Response.End()

end if

'-----------------------------------检测上传路径是否存在

if fFsoCkFdr(path, true)=false then

call suErr("指定的上传文件路径不存在", "?", 3)

Response.End()

end if

tl_phspath=Server.MapPath(path)

dim bnTotal:bnTotal=Request.BinaryRead(tl_totalbytes)

dim bnMarker:bnMarker=leftB(bnTotal,instrB(bnTotal,chrB(32))-1) ' 文件头状况分隔符'

dim bnLf:bnLf=chrB(13)&chrB(10)

dim bnFieldMarker:bnFieldMarker=leftB(bnTotal,inStrB(bnTotal,chrB(13))-1)

dim iStart:iStart=1

dim iJump

dim iBnStart, iBnEnd

dim arHeaderStartTemp, arHeaderEndTemp, arHeaderStrTemp

dim arHeaderStart, arHeaderEnd, arHeaderStr

dim arFieldStart, arFieldEnd

do

iJump=inStrB(iStart, bnTotal, bnMarker)

if iJump<>0 then

iStart=iJump+1 '取二进制开始位置'

iBnStart=inStrB(iStart, bnTotal, bnLf&bnLf) '取二进制结束位置

iBnEnd=inStrB(iBnStart+5, bnTotal, bnFieldMarker)

tl_totalHeader=tl_totalHeader+1 ' 取头部总数

if inStrB(midB(bnTotal, iBnStart+4, 36),midB(bnFieldMarker,1))=0 then

'-----------------------------临时 取头部起始位置'

if isArray(arHeaderStartTemp) then redim preserve arHeaderStartTemp(tl_totalfield) _

else redim arHeaderStartTemp(tl_totalfield)

arHeaderStartTemp(tl_totalfield)=iStart-1

'-----------------------------临时 取头部结束位置'

if isArray(arHeaderEndTemp) then redim preserve arHeaderEndTemp(tl_totalfield) else _

redim arHeaderEndTemp(tl_totalfield)

arHeaderEndTemp(tl_totalfield)=iBnStart+2-iStart

'-----------------------------临时 取头部字串'

if isArray(arHeaderStrTemp) then redim preserve arHeaderStrTemp(tl_totalfield) _

else redim arHeaderStrTemp(tl_totalfield)

arHeaderStrTemp(tl_totalfield)=_

fBin2Str(midB(bnTotal,iStart-1,arHeaderEndTemp(tl_totalfield)),charset)

'-----------------------------检测附加选项'

if inStr(arHeaderStrTemp(tl_totalfield),"filename")=0 and inStr(_

arHeaderStrTemp(tl_totalfield),"; name=")<>0 then

select case fRe(arHeaderStrTemp(tl_totalfield),true,true,_

true,"[/s/S]*?name/=/""(.*?)""[/s/S]*","$1")

case "nprefix":

prefix=fBin2Str(midB(bnTotal,iBnStart,iBnEnd-iBnStart),charset)

if debug then

Response.write("<br/>prefix string: "&prefix)

end if

case "nrndpfx": rndpostfix=true

case "nautorename": autorename=true

end select

if debug then

Response.write("<br/>header not upload file: "&arHeaderStrTemp(tl_totalfield))

end if

tl_totalnotfile=tl_totalnotfile+1

else

if inStr(arHeaderStrTemp(tl_totalfield), "filename=""""")=0 then

'-----------------------------取头部起始位置'

if isArray(arHeaderStart) then redim preserve arHeaderStart(tl_totalfile) _

else redim arHeaderStart(tl_totalfile)

arHeaderStart(tl_totalfile)=iStart-1

'-----------------------------取头部结束位置'

if isArray(arHeaderEnd) then redim preserve arHeaderEnd(tl_totalfile) else _

redim arHeaderEnd(tl_totalfile)

arHeaderEnd(tl_totalfile)=iBnStart+2-iStart

'-----------------------------取头部字串'

if isArray(arHeaderStr) then redim preserve arHeaderStr(tl_totalfile) else redim _

arHeaderStr(tl_totalfile)

arHeaderStr(tl_totalfile)=_

fBin2Str(midB(bnTotal,iStart-1,arHeaderEnd(tl_totalfile)),charset)

'-----------------------------取文件内容起始位置'

if isArray(arFieldStart) then redim preserve arFieldStart(tl_totalfile) else redim _

arFieldStart(tl_totalfile)

arFieldStart(tl_totalfile)=iBnStart

'-----------------------------取文件内容结束位置'

if isArray(arFieldEnd) then redim preserve arFieldEnd(tl_totalfile) else redim _

arFieldEnd(tl_totalfile)

arFieldEnd(tl_totalfile)=iBnEnd

if debug then

Response.write("<br/>header "&tl_totalfile&" start position: "&_

arHeaderStartTemp(tl_totalfile))

Response.write("<br/>header "&tl_totalfile&" end read plus: "&_

arHeaderEndTemp(tl_totalfile))

Response.write("<br/>header "&tl_totalfile&" string: "&_

arHeaderStrTemp(tl_totalfile))

Response.write("<br/>file content "&tl_totalfile&" start position: "&_

arFieldStart(tl_totalfile))

Response.write("<br/>file content "&tl_totalfile&" end position: "&_

arFieldEnd(tl_totalfile))

Response.write("<br/>")

end if

tl_totalfile=tl_totalfile+1

end if

end if

tl_totalfield=tl_totalfield+1 ' 取上传总文件数

end if

else

exit do

end if

loop

if debug then

Response.write("<br/>上传头部总数: "&tl_totalHeader)

Response.write("<br/>可用头部总数: "&(tl_totalfile+tl_totalnotfile))

Response.write("<br/>上传文件总数: "&tl_totalfile)

Response.write("<br/>上传非文件总数: "&tl_totalnotfile)

Response.write("<br/>文件前缀: "&prefix)

Response.write("<br/>自动重命名: "&autorename)

Response.write("<br/>随机后缀: "&rndpostfix)

Response.write("<p/>上传虚拟路径: "&path)

Response.write("<br/>上传物理路径: "&tl_phspath)

Response.write("<br/>上传总大小为: "&formatNumber(tl_sizebykb)&" Kb")

Response.write("<br/>限制总大小为: "&(totalsize)&" Kb")

Response.write("<br/>限制每文件大小为: "&(singlesize)&" Kb")

end if

'-----------------------------------检测是否有文件上传'

if not isArray(arHeaderStr) then

call suErr("没有可上传的文件,", "?", 3)

Response.End()

end if

'-----------------------------------开始处理上传文件'

dim iSave

dim sFlNm, sFlPrx, sFlPox, sFnlNm

dim sFlpoxTemp

dim bnFileContent

dim sPathTemp

dim iArCkTemp

dim bFlag, bFileExist

dim sAutorename, iAutorename

dim iUpsizeByteTemp, iUpsizeKbTemp, iUpsizeMbTemp

dim sUPDetailTemp

for iSave=0 to uBound(arHeaderStr)

iAutorename=1

bFlag=true

bFileExist=false

sFlNm=fRe(arHeaderStr(iSave), false, true, false,_

"[/s/S]*filename=""(.*?)""[/s/S]*", "$1")

sFlNm=fRe(sFlNm, false, true, false,".*//(.*)", "$1")

if inStr(sFlNm, ".")<>0 then

sFlPrx=fRe(sFlNm, false, true, false,"(.*)/..*", "$1")

sFlPox=fRe(sFlNm, false, true, false,".*/.(.*)", "$1")

'-------------------------------------允许上传的文件扩展名'

if fReTest(extension, "/b"&sFlPox&"/b") then

sFlPrx=fRe(prefix&sFlPrx, true, true, false,"/s+", "")

if rndpostfix then

sFlpoxTemp=fRndStr(10)

sFlPrx=sFlPrx&sFlpoxTemp

end if

sFnlNm=sFlPrx&"."&sFlPox

bnFileContent=_

midB(bnTotal,arFieldStart(iSave)+3,arFieldEnd(iSave)-arFieldStart(iSave)-3)

sPathTemp=path+sFnlNm

if ckeckfile then

if fReTest(listForCheck, "/b"&sFlPox&"/b") then

for iArCkTemp=0 to uBound(tl_arCkFl)

'--------------------------------检测恶意代码

if inStrB(1, bnFileContent, tl_arCkFl(iArCkTemp), 1)<>0 then

if isArray(tl_arErrMaliceCode) then redim preserve _

tl_arErrMaliceCode(uBound(tl_arErrMaliceCode)+1) else redim tl_arErrMaliceCode(0)

tl_arErrMaliceCode(uBound(tl_arErrMaliceCode))=sFlNm

bFlag=false

exit for

end if

next

end if

end if

if bFlag then

bFileExist=fCheckFile(Server.MapPath(sPathTemp))

iUpsizeByteTemp=arFieldEnd(iSave)-arFieldStart(iSave)-3

iUpsizeKbTemp=iUpsizeByteTemp/1024

iUpsizeMbTemp=iUpsizeKbTemp/1024

if bFileExist then '存在相同名称的文件'

if debug then Response.write("<br/>已存在文件: "&sPathTemp)

if autorename then

do

sAutorename=fRe(sPathTemp, false, true, false,"(.*)/..*", "$1")

sAutorename=sAutorename&"_"&iAutorename&"."&sFlPox

if fCheckFile(Server.MapPath(sAutorename))=false then

exit do

end if

iAutorename=iAutorename+1

loop

sFnlNm=fRe(sAutorename, false, true, false,".*//(.*)", "$1")

'------------------------------------------保存上传文件子过程'

call suSavingFile(iUpsizeKbTemp, singlesize, sAutorename, sFlNm, sFnlNm, _

iUpsizeByteTemp, iUpsizeMbTemp, bnTotal, iSave, arFieldStart, arFieldEnd)

if debug then Response.write("<br/>自动重命名: "&sAutorename)

else

if isArray(tl_arErrFileExists) then redim preserve _

tl_arErrFileExists(uBound(tl_arErrFileExists)+1) else redim tl_arErrFileExists(0)

tl_arErrFileExists(uBound(tl_arErrFileExists))=sFnlNm

if debug then Response.write("<br/> 已存在相同的文件: "&sFnlNm)

end if

else

if debug then

Response.write("<br/>")

Response.write("<br/> 上传文件大小大于单文件限制:"&(iUpsizeKbTemp>singlesize))

Response.write("<br/>文件大小:"&iUpsizeByteTemp&" byte, 约合: "&_

(formatNumber(iUpsizeKbTemp))&" kb")

end if

'------------------------------------------保存上传文件子过程'

call suSavingFile(iUpsizeKbTemp, singlesize, sPathTemp, sFlNm, sFnlNm, _

iUpsizeByteTemp, iUpsizeMbTemp, bnTotal, iSave, arFieldStart, arFieldEnd)

end if

end if

else

'------------------------------------不允许上传的文件扩展名'

if isArray(tl_arErrNotAllowExt) then redim preserve _

tl_arErrNotAllowExt(uBound(tl_arErrNotAllowExt)+1) else redim tl_arErrNotAllowExt(0)

tl_arErrNotAllowExt(uBound(tl_arErrNotAllowExt))=sFlNm

if debug then

Response.write("<br/>")

Response.write("<br/>不允许上传的文件扩展名: "&sFlNm)

end if

end if

if debug then

Response.write("<br/>文件名: "&sFlNm)

Response.write("<br/>前缀: "&prefix)

Response.write("<br/>后缀: "&sFlpoxTemp)

Response.write("<br/>最终文件名: "&sFnlNm)

end if

else

'--------------------------------------没有扩展名的文件

if isArray(tl_arErrNoExt) then redim preserve tl_arErrNoExt(uBound(tl_arErrNoExt)+1) _

else redim tl_arErrNoExt(0)

tl_arErrNoExt(uBound(tl_arErrNoExt))=sFlNm

end if

next

end function 'fExec'

private sub suSavingFile(iUpsizeKbTemp, singlesize, sPathTemp, sFlNm, sFnlNm, _

iUpsizeByteTemp, iUpsizeMbTemp, bnTotal, iSave, arFieldStart, arFieldEnd)

'----------------------------------判断单文件是否超出限制大小'

if iUpsizeKbTemp<=singlesize then

call fBinSv2fl(bnTotal,arFieldStart(iSave)+3,arFieldEnd(iSave)-_

arFieldStart(iSave)-3, sPathTemp, 2)

if isArray(tl_arUploadList) then redim preserve _

tl_arUploadList(uBound(tl_arUploadList)+1) else redim tl_arUploadList(0)

tl_arUploadList(uBound(tl_arUploadList))=sFlNm

if isArray(tl_arFinalName) then redim preserve _

tl_arFinalName(uBound(tl_arFinalName)+1) else redim tl_arFinalName(0)

tl_arFinalName(uBound(tl_arFinalName))=sFnlNm

if isArray(tl_arUploadDetail) then redim preserve _

tl_arUploadDetail(uBound(tl_arUploadDetail)+1) else redim tl_arUploadDetail(0)

tl_arUploadDetail(uBound(tl_arUploadDetail))=_

"上传文件大小为: "&iUpsizeByteTemp&" Byte, 约合 "&formatNumber(iUpsizeKbTemp)&_

" Kb, "&formatNumber(iUpsizeMbTemp)&" Mb"

'iUpsizeKbTemp'

tl_finalupload=tl_finalupload+1

else

if isArray(tl_arErrOversize) then redim preserve _

tl_arErrOversize(uBound(tl_arErrOversize)+1) else redim tl_arErrOversize(0)

tl_arErrOversize(uBound(tl_arErrOversize))=sFlNm

if isArray(tl_arErrOversizeDetail) then redim preserve _

tl_arErrOversizeDetail(uBound(tl_arErrOversizeDetail)+1) else redim _

tl_arErrOversizeDetail(0)

tl_arErrOversizeDetail(uBound(tl_arErrOversizeDetail))="上传文件: "&sFlNm&_

", 总大小约为 "&formatNumber(iUpsizeKbTemp)&" kb, 超出单文件限制大小 "&_

singlesize&" kb, 已被中止上传."

end if

end sub 'suSavingFile'

private function fFileList(aFileList)

dim sTemp, aTemp, iUbound, iTemp

if isArray(aFileList) then

iUbound=ubound(aFileList)

redim aTemp(iUbound)

for iTemp=0 to iUbound

aTemp(itemp)=path&aFileList(iTemp)

next

sTemp=join(aTemp,",")

else

sTemp=""

end if

filelist=sTemp

end function 'fFileList'

private function fReport()

if not tl_bAllowUpload then

exit function

end if

call suErr1("上传操作处理完毕", "返回", "秒后返回", "?", gobackSecond, gobackSecond)

if isArray(tl_arErrNoExt) or isArray(tl_arErrNotAllowExt) or isArray(tl_arErrMaliceCode) _

or isArray(tl_arErrFileExists) or isArray(tl_arUploadList) or isArray(tl_arErrOversize) _

then

Response.write("<div class='report'>")

Response.write("<h2>上传信息</h2>")

Response.write("<h3 class='crRed'>本次上传文件总数: "& tl_totalfile&", 成功上传文件总数: "&_

tl_finalupload&", 被终止上传文件总数: "&(tl_totalfile-tl_finalupload)&".</h3>")

Response.write("<h2>上传明细:</h2>")

'---------------------------------已上传文件

if isArray(tl_arUploadList) then

dim iUplist

Response.write("<ol>")

Response.write("<label class='crHl dspBl'>已上传文件:</label>")

for iUplist=0 to uBound(tl_arUploadList)

Response.write("<li><b>")

Response.write(tl_arUploadList(iUplist))

Response.write("</b><label class='dspBl'>上传描述:<br/>最终文件名: <b class='crFcs'>"&_

tl_arFinalName(iUplist)&"</b><br/>"&tl_arUploadDetail(iUplist)&"</label>")

Response.write("</li>")

next

Response.write("</ol>")

Response.write("<hr/>")

fFileList(tl_arFinalName)

end if

'---------------------------------超出单文件大小限制

if isArray(tl_arErrOversize) then

dim iOversize

Response.write("<ol>")

Response.write("<label>超出单文件大小限制的文件有 "&(uBound(tl_arErrOversize)+1)&_

" 个.</label>")

for iOversize=0 to uBound(tl_arErrOversize)

Response.write("<li><b class='crRed'>")

Response.write(tl_arErrOversize(iOversize))

Response.write("</b><label class='dspBl'>被中止上传描述:<br/>"&_

tl_arErrOversizeDetail(iOversize)&"</label>")

Response.write("</li>")

next

Response.write("</ol>")

Response.write("<hr/>")

end if

'---------------------------------已存在相同的文件名

if isArray(tl_arErrFileExists) then

dim iAlreadyExists

Response.write("<ol>")

Response.write("<label>已存在相同的文件名, "&(uBound(tl_arErrFileExists)+1) &_

" 个文件无法上传.</label>")

for iAlreadyExists=0 to uBound(tl_arErrFileExists)

Response.write("<li><b class='crRed'>")

Response.write(tl_arErrFileExists(iAlreadyExists))

Response.write("</b>")

Response.write("</li>")

next

Response.write("</ol>")

Response.write("<hr/>")

end if

'---------------------------------不允许上传的文件扩展类型

if isArray(tl_arErrNotAllowExt) then

dim iNotAllowExt

Response.write("<ol>")

Response.write("<label>不允许上传的文件扩展类型, "&(uBound(tl_arErrNotAllowExt)+1) &_

" 个文件无法上传.</label>")

for iNotAllowExt=0 to uBound(tl_arErrNotAllowExt)

Response.write("<li><b class='crRed'>")

Response.write(tl_arErrNotAllowExt(iNotAllowExt))

Response.write("</b>")

Response.write("</li>")

next

Response.write("</ol>")

Response.write("<hr/>")

end if

'---------------------------------检测到包含恶意代码的文件

if isArray(tl_arErrMaliceCode) then

dim iMaliceCode

Response.write("<ol>")

Response.write("<label>检测到包含恶意代码的文件, "&(uBound(tl_arErrMaliceCode)+1) &_

" 个文件无法上传.</label>")

for iMaliceCode=0 to uBound(tl_arErrMaliceCode)

Response.write("<li><b class='crRed'>")

Response.write(tl_arErrMaliceCode(iMaliceCode))

Response.write("</b>")

Response.write("</li>")

next

Response.write("</ol>")

Response.write("<hr/>")

end if

'---------------------------------检测到包含恶意代码的文件

if isArray(tl_arErrNoExt) then

dim iNoExt

Response.write("<ol>")

Response.write("<label>没有扩展名的文件, "&(uBound(tl_arErrNoExt)+1) &_

" 个文件无法上传.</label>")

for iNoExt=0 to uBound(tl_arErrNoExt)

Response.write("<li><b class='crRed'>")

Response.write(tl_arErrNoExt(iNoExt))

Response.write("</b>")

Response.write("</li>")

next

Response.write("</ol>")

Response.write("<hr/>")

end if

Response.write("</div>")

else

exit function

end if

end function 'fReport()'

private function fBinSv2fl(bin, bStart, bEnd, filepath_, ovWrite)

'--------------------------------------

' 截取二进制流保存为文件 By shawl.qiu

' http://blog.csdn.net/btbtd

'---------------------------

' sample call: call fBinSv2fl(bRead,fieldStartPsti(i)+3,fieldEndPsti(i)-fieldStartPsti(i)-3, fileName, 2)

'------------

' 参数说明:

'---------

' bin: 源二进制流

' bStart: 截取二进制流的起始位置

' bEnd: 截取二进制流的结束位置

' filepath_: 保存文件的路径

' ovWrite: 是否覆盖原有文件. 1: 不覆盖; 2. 覆盖

'--------------------------------------

filepath_=server.MapPath(filepath_)

dim stm_, fromStm_

set stm_=createObject("adodb.stream")

stm_.type=1

stm_.mode=3

stm_.open

stm_.write bin

set fromStm_=createOBject("adodb.stream")

with fromStm_

.type=1

.mode=3

.open

stm_.position = bStart

stm_.copyTo fromStm_, bEnd

.saveTofile filepath_, ovWrite

.close

end with

set fromStm_=nothing

stm_.close 'shawl.qiu code'

set stm_=nothing

end function

private sub suErr(byval sStr, byval sCurl, byval iSecond)

dim sUrl:sUrl=Request.ServerVariables("HTTP_REFERER")

if sUrl="" then sUrl="/"

if sCurl<>"" then sUrl=sCurl

Response.write("<meta http-equiv='refresh' content='"&iSecond&";URL="&gobackurl&"'>")

Response.write("<div style='display:table;width:100%;background-color:yellow!important;"&_

"color:black!important;text-align:center!important;'>"&sStr&" "&iSecond&" 秒后返回.</div>")

end sub 'suErr'

private sub suErr1(byval sStr, byval sGbPox, byval sGbMid, byval sCurl,_

byval iSecond, byval iDesc)

dim sUrl:sUrl=Request.ServerVariables("HTTP_REFERER")

if sUrl="" then sUrl="/"

if sCurl<>"" then sUrl=sCurl

Response.write("<script type='text/javascript'>"&vbcrlf)

Response.write("//<![CDATA["&vbcrlf)

Response.write(" onload=function(){"&vbcrlf)

Response.write(" fTimer("&iSecond&",'timer', 10);"&vbcrlf)

Response.write(" }"&vbcrlf)

Response.write(" function fTimer(iTimestamp, sId, iMs){"&vbcrlf)

Response.write(" if(!(iTimestamp.constructor==Date)){"&vbcrlf)

Response.write(" var sqTimeStamp=new Date();"&vbcrlf)

Response.write(" sqTimeStamp.setSeconds(sqTimeStamp.getSeconds()+iTimestamp);"&vbcrlf)

Response.write(" iTimestamp=sqTimeStamp;"&vbcrlf)

Response.write(" }"&vbcrlf)

Response.write(" var tl=arguments.callee;"&vbcrlf)

Response.write(" if(typeof sId=='string'){"&vbcrlf)

Response.write(" var oEle=document.getElementById(sId);"&vbcrlf)

Response.write(" } else {"&vbcrlf)

Response.write(" var oEle=sId;"&vbcrlf)

Response.write(" }"&vbcrlf)

Response.write(" var dt=new Date();"&vbcrlf)

Response.write(" var iCk=((iTimestamp.getTime()-dt.getTime())/1000).toFixed(3);"&vbcrlf)

Response.write(" if(iCk<=0){"&vbcrlf)

Response.write(" oEle.innerHTML='00.000';"&vbcrlf)

Response.write(" return false;"&vbcrlf)

Response.write(" } else {"&vbcrlf)

Response.write(" oEle.innerHTML=iCk;"&vbcrlf)

Response.write(" var iTimer=setTimeout(function(){tl(iTimestamp, oEle, iMs)},iMs); "&_

vbcrlf)

Response.write(" }"&vbcrlf)

Response.write(" } // end function fTimer // shawl.qiu script"&vbcrlf)

Response.write("//]]>"&vbcrlf)

Response.write("</script>"&vbcrlf)

Response.write("<meta http-equiv='refresh' content='"&iSecond&";URL="&gobackurl&"'>")

Response.write("<div style='display:table;width:100%;background-color:yellow!important;"&_

"color:black!important;text-align:center!important;'>"&sStr&" "&iDesc&_

" "&sGbMid&", 还有<span id='timer'>"&iSecond&"</span> "&sGbPox&"</div>")

end sub 'suErr1'

private function fForm()

Response.write("<form action='"&action&"' method='post' id='uform'"&_

" enctype='multipart/form-data' >"&vblf)

dim i

for i=1 to item

Response.write("<div class='itemlist'>")

Response.write("<input type='file' name='file' class='upButton' />")

Response.write("</div>"&vblf)

next

if autoRenameOpt=true then

Response.write("<div class='btnOpt'>")

Response.write(" "&wordAutoRename&": <input type='checkbox' name='nautorename'"&_

" checked='checked' />")

Response.write("</div>")

end if

if rndPostfixOpt=true then

Response.write("<div class='btnOpt'>")

Response.write(" "&wordRndPostfix&": <input type='checkbox' name='nrndpfx'"&_

" checked='checked' />")

Response.write("</div>")

end if

if prefixOpt=true then

Response.write("<div class='btnOpt'>")

Response.write(" "&wordPrefix&": <input type='text' name='nprefix' value='"&_

wordPrefixValue&"' size='15'/>")

Response.write("</div>")

end if

Response.write("<div class='btnAct'><input type='submit' onclick="""&_

"return confirm('"&wordSubmit&"?')""/> ")

Response.write("<input type='reset' onclick="""&_

"return confirm('"&wordReset&"')""/> </div> ")

Response.write("</form>")

if debug then Response.write("<a href='?'>back</a>")

end function 'fForm'

private function fInfo()

Response.write("<div class='upInfo' style='padding:5px 0px'>")

Response.write("<div>")

Response.write("<b>允许上传的文件类型</b>: "&extension)

Response.write("</div>")

Response.write("<div>")

Response.write("<b>上传总大小限制</b>: "&totalsize&" kb")

Response.write(", <b>每文件总大小限制</b>: "&singlesize&" kb.")

Response.write("</div>")

Response.write("<div>")

Response.write("<b>每次上传时间间隔为</b>: "&interval&" 秒")

Response.write("</div>")

Response.write("</div>")

end function 'fInfo'

private function fHeader()

'public auSubject, auVersion, au, auEmail, auBlog, auCreateDate'

Response.write("<div class='au_header'>")

Response.write(auSubject&" "&auVersion)

Response.write("</div>")

end function 'fHeader'

private function fFooter()

'public auSubject, auVersion, au, auEmail, auBlog, auCreateDate'

Response.write("<div class='au_footer'>")

Response.write("版权声明: 本程序允许非商业性的自由传播与应用, 商业使用者需经作者许可,"&_

" 否则将追究法律责任.")

Response.write("</div>")

end function 'fHeader'

private function fAbout()

Response.write("<div class='about'>")

Response.write("<ul>")

Response.write("<li class='ftBld'>subject: "&auSubject&"</li>")

Response.write("<li>version: "&auVersion&"</li>")

Response.write("<li>author: "&au&"</li>")

Response.write("<li>e-mail: "&auEmail&"</li>")

Response.write("<li>blog: "&auBlog&"</li>")

Response.write("<li>created: "&auCreateDate&"</li>")

Response.write("<li>published: "&auPubDate&"</li>")

Response.write("</ul>")

Response.write("<ol>")

Response.write("<label class='ftBld'>功能摘要:</label>")

Response.write("<li>支持 自定义上传多个文件</li>")

Response.write("<li>支持 中文文件名</li>")

Response.write("<li>支持 自定义上传总大小</li>")

Response.write("<li>支持 自定义上传每文件总大小</li>")

Response.write("<li>支持 自定义上传文件类型</li>")

Response.write("<li>支持 自定义上传间隔</li>")

Response.write("<li>支持 自定义是否重命名文件(在已存在相同名称的文件名时)</li>")

Response.write("<li>支持 自定义是否添加随机后缘</li>")

Response.write("<li>支持 自定义添加前缀</li>")

Response.write("</ol>")

Response.write("<ul>")

Response.write("<label class='ftBld'>升级描述:</label>")

Response.write("<li>"&auUpDesc&"</li>")

Response.write("</ul>")

Response.write("</div>")

end function 'fAbout'

private function fFsoCkFdr(byval sPath, byval bCov)

' FSO 检测文件夹函数 By shawl.qiu

if bCov then sPath=Server.MapPath(sPath)

fFsoCkFdr=createObject("scripting.fileSystemObject").folderExists(sPath)

end function 'fFsoCkFdr'

private function fBin2Str(str, charSet)

'--------------------------------------

' 二进制转字符串函数 By shawl.qiu

' http://blog.csdn.net/btbtd

'--------------------------

' 参数说明:

'----------

' str: 要转换成字符串的二进制数据

' charSet: 字符串默认编码集, 如不指定, 则默认为 gb2312

'-------------

' sample call: response.write fBin2Str(midB(fStr2Bin(str, "utf-8"),1),"utf-8")

'--------------------------------------

' 注意: 二进制字符串必须先用 midB(binaryString,1) 读取(可自定读取长度).

'--------------------------------------

dim stm_

set stm_=createObject("adodb.stream")

with stm_

.type=2

.open

.writeText str

.Position = 0

if charSet<>"" then

.CharSet = charSet

else

.CharSet = "gb2312"

end if

fBin2Str=.ReadText

.close

end with 'shawl.qiu code'

set stm_=nothing

end function 'fBin2Str'

private function fRe(str,glb,igc,mtl,pt,rpt)

dim re

set re=new RegExp

re.global=glb

re.ignoreCase=igc

re.multiline=mtl

re.pattern=pt

fRe=re.replace(str,rpt)

set re=nothing

end function 'fRe shawl.qiu code'

private function fRndStr(num)

if isNumeric(num)=false then exit function else num=int(num)

dim i, j

dim rndStr(61)

for j=0 to 9:rndStr(j)=cStr(j):next

j=10:for i=65 to 90:rndStr(j)=chr(i):j=j+1:next

j=36:for i=97 to 122:rndStr(j)=chr(i):j=j+1:next

j=0:randomize

do until j=num:fRndStr=fRndStr+rndStr(Int((61 - 0 + 1) * Rnd + 0)):j=j+1:loop

erase rndStr

end function 'shawl.qiu code

private function fReTest(sStr,sPt)

dim re

set re=new RegExp

re.ignoreCase=true

re.pattern=sPt

fReTest=re.test(sStr)

set re=nothing

end function 'fReTest shawl.qiu code'

private function fCheckFile(path)

' FSO 检测文件函数 By shawl.qiu

fCheckFile=createObject("scripting.fileSystemObject").fileExists(path)

end function

'------------------------------------end private method

end class

'---------------------------------------------------------------------end class sqUpload

%>

</body>

</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息