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>
相关文章推荐
- shawl.qiu ASP 无组件上传类 1.0 Beta 版 发布
- shawl.qiu ASP 无组件上传类 1.0 Final 版
- asp jscript, vbscript 的 动态交互 与 动态加载 By shawl.qiu
- asp jscript 调用 asp vbscript class/类, by shawl.qiu
- ASP VBScript 函数 之返回多个值 By shawl.qiu
- shawl.qiu asp 记录集分页类(vbscript 1.0 && jscript 1.1)
- ASP Class(类) 之 使用内建组件 cdo.message 发送邮件 By shawl.qiu
- ASP Class(类) 之 使用内建组件 cdo.message 发送邮件 By shawl.qiu
- ASP VBScript 动态包含文件, FSO 实现 By Shawl.qiu
- windows禁用VBScript.Encode组件使ASP加密文件失效
- shawl.qiu asp/jscript 文件管理器 v1.0
- asp无组件上传类的应用实例
- shawl.qiu ASP 正则调试器 v1.0
- asp.net DataList 复选框 也玩 全选反选全不选 by shawl.qiu
- ASP实例:一个简单的ASP无组件上传类
- JavaScript写的ASP无组件上传类
- 服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
- JScript 中 eval 实现 VBScript ExecuteGlobal 功能, 函数 fExecuteGlobal by shawl.qiu
- ASP 优化之显示数据查询内容 By shawl.qiu
- FSO组件不可用,各种与FSO相关的功能都将出错!请运行Install.asp或者到后台网站配置处设置好FSO组件名称。或无法使用vbscript