直接保存URL图像或网页到服务器本地的类
2018-09-06 12:24
复制代码 代码如下:
<%@LANGUAGE=VBSCRIPTCODEPAGE=936%>
<%
OptionExplicit
ClassBoxInfoImg
传输类的使用方法
图象上传和上传信息获取CLASS
用法:
dimimgUp
setimgUp=newBoxInfoImg
属性:
imgUp.width宽
imgUp.height高
imgUp.imgSize大小
imgUp.imgType类型
imgUp.imgName文件名
imgUp.imgName图像文件名:&
imgUp.filename文件名&
imgUp.extName扩展名
imgUp.DiskPath保存位置
imgUp.XuPath虚拟路径
imgUp.NewUrl保存后url
imgUp.SaveMode保存后url
方法:
imgUp.saveImg(fullpath)保存图像文件
dimADOS
dimwidth,height,imgSize,imgType,imgName,fileName
dimpreName,extName
dimSavePath,SaveName,SaveMode
dimDiskPath,XuPath,NewUrl
dimtextStr
dimi
PrivateSubClass_Initialize
setADOS=Server.CreateObject(Adodb.Stream)
ADOS.Type=1
ADOS.Mode=3
ADOS.Open
getImageSize
EndSub
PrivateSubClass_Terminate
ADOS.close
setADOS=nothing
EndSub
PublicFunctiongetImageSize()
dimret(3),bFlag,fdata,fsize
fdata=GetWebData(GetStrUrl)取得XmlHttp数据
fsize=clng(lenb(fdata))取得数据尺寸
iffsize=0then
exitfunction
R_write无有效数据保存,0
endif
ADOS.Writefdata
ADOS.Position=0
SaveName=iSaveName
SavePath=iSavePath
SaveMode=iSaveMode
写文本对象读取图像长宽和类型
ADOS.Position=0重置数据开始位置
bFlag=ADOS.read(3)
ifisNull(bFlag)then
width=0
height=0
imgSize=0
imgType=unknow
ret(0)=imgType:ret(1)=width:ret(2)=height:ret(3)=
getimagesize=ret
exitfunction
endif
取文件类型和长宽
selectcasehex(binVal(bFlag))
case4E5089:
ADOS.read(15)
ret(0)=png
ret(1)=BinVal2(ADOS.read(2))
ADOS.read(2)
ret(2)=BinVal2(ADOS.read(2))
case464947:
ADOS.read(3)
ret(0)=gif
ret(1)=BinVal(ADOS.read(2))
ret(2)=BinVal(ADOS.read(2))
caseFFD8FF:
dimp1
do
do:p1=binVal(ADOS.Read(1)):loopwhilep1=255andnotADOS.EOS
ifp1>191andp1<196thenexitdoelseADOS.read(binval2(ADOS.Read(2))-2)
do:p1=binVal(ADOS.Read(1)):loopwhilep1<255andnotADOS.EOS
loopwhiletrue
ADOS.Read(3)
ret(0)=jpg
ret(2)=binval2(ADOS.Read(2))
ret(1)=binval2(ADOS.Read(2))
caseelse:
ifleft(Bin2Str(bFlag),2)=BMthen
ADOS.Read(15)
ret(0)=bmp
ret(1)=binval(ADOS.Read(4))
ret(2)=binval(ADOS.Read(4))
else
ret(0)=
endif
endselect
dimtempStr
dimnameStr
dimdefaultName
dimln
tempStr=split(GetStrUrl,/)
nameStr=tempStr(ubound(tempStr))
ifnameStr=then
r_write错误的URL,请输入可访问的URL,0
exitfunction
endif
fileName=split(nameStr,?)(0)
ln=inStrRev(fileName,.)
ifln>0then
preName=left(fileName,inStrRev(fileName,.)-1)
else
preName=fileName
endif
R_writefileName,1
R_writeinStrRev(fileName,.),1
R_writefileName,0
extName=right(fileName,len(fileName)-inStrRev(fileName,.))
Selectcaseret(0)
casepng,jpg,bmp,gif,swf
width=ret(1)
height=ret(2)
imgSize=fsize
imgType=ret(0)
imgName=preName&.&ret(0)
caseelse
width=0
height=0
imgSize=fsize
imgName=unknow
imgType=.unknow
endselect
ifSaveMode=1then
defaultName=imgName
ifSaveName=then
SaveName=defaultName
else
iflcase(right(SaveName,4))<>.&imgTypethen
SaveName=SaveName&.&imgType
endif
endif
else
defaultName=filename
endif
ifSaveName=thenSaveName=defaultName
SavePath=replace(SavePath,//,/)
ifright(SavePath,1)<>/thenSavePath=SavePath&/
ifSavePath=thenSavePath=./
DiskPath=server.mappath(SavePath&SaveName)
XuPath=replace(replace(DiskPath,server.mappath(/),),\,/)
NewUrl=
getimagesize=ret
EndFunction
PublicfunctionSaveImg(FullPath)
SaveImg=false
ifSaveMode=1then
iftrim(fullpath)=or_
width=0or_
height=0or_
imgSize=0or_
imgType=.unknowthenexitfunctionendif
endif
ADOS.Position=0
ifSaveMode=2then
ADOS.Type=2
ADOS.Charset=gb2312
ADOS.SaveToFileFullPath,2
textStr=ADOS.readtext()
else
ADOS.SaveToFileFullPath,2
endif
SaveImg=true
Endfunction
PrivateFunctionBin2Str(Bin)
DimI,Str,clow
ForI=1toLenB(Bin)
clow=MidB(Bin,I,1)
ifASCB(clow)<128then
Str=Str&Chr(ASCB(clow))
else
I=I+1
ifI<=LenB(Bin)thenStr=Str&Chr(ASCW(MidB(Bin,I,1)&clow))
endif
Next
Bin2Str=Str
EndFunction
PrivateFunctionNum2Str(num,base,lens)
dimret:ret=
while(num>=base)
ret=(nummodbase)&ret
num=(num-nummodbase)/base
wend
Num2Str=right(string(lens,0)&num&ret,lens)
EndFunction
PrivateFunctionStr2Num(str,base)
dimret:ret=0
fori=1tolen(str)
ret=ret*base+cint(mid(str,i,1))
next
Str2Num=ret
EndFunction
PrivateFunctionBinVal(bin)
dimret:ret=0
fori=lenb(bin)to1step-1
ret=ret*256+ascb(midb(bin,i,1))
next
BinVal=ret
EndFunction
PrivateFunctionBinVal2(bin)
dimret:ret=0
fori=1tolenb(bin)
ret=ret*256+ascb(midb(bin,i,1))
next
BinVal2=ret
EndFunction
PrivateFunctionGetWebData(byvalStrUrl)
ifStrUrl=then
r_write无效,1
exitfunction
endif
dimtempStr
tempStr=split(GetStrUrl,/)
iftempStr(ubound(tempStr))=orinStr(StrUrl,/)=0then
R_Write未指定有效的URL,0
exitfunction
endif
dimRetrieval
SetRetrieval=Server.CreateObject(Microsoft.XMLHTTP)
WithRetrieval
.OpenGet,StrUrl,False,,
.Send
GetWebData=.ResponseBody
EndWith
SetRetrieval=Nothing
EndFunction
EndClass
%>
<%
SUBsaveUpload(GetUrl,SavePath,SaveName,mode)
dimchkInfo
ifGetUrl=then
calltform()
R_Write<br>传输文件栏没有填写!,0
endif
setimgUp=newBoxInfoImg
ifmode=1andimgUp.imgName=unknowthen
calltform()
setimgUp=nothing
R_Write<br>传输文件栏没有填写有效的图像URL!,0
endif
chkInfo=
dimi,testStr,showStr
限定格式
selectcaseimgUp.imgType
casepng,jpg,bmp,gif
ifimgUp.width=0orimgUp.height=0orimgUp.imgSize=0then
chkInfo=<li>+传输图像数据不存在,请确定你的URL是否正确
endif
caseelse
chkInfo=<li>无效的传输格式,允许图像数据格式为png,jpg,bmp,gif</li>
endselect
R_WriteSavePath,1
R_Writemode,1
R_WriteimgUp.imgName,1
R_WriteimgUp.filename,1
R_WriteSaveName=&SaveName,1
ifmode=1andchkInfo<>then检查上传图像数据合格后,则保存之
calltform()
R_WritechkInfo,0
else
Server.ScriptTimeOut=5000
imgUp.saveImgimgUp.DiskPath
endif
-------------
R_write<b>===处理结果部分资料===</b><br>,1
R_write宽:&imgUp.width&pix,1
R_write高:&imgUp.height&pix,1
R_write大小:&formatnumber(imgUp.imgSize/1024,2,-1)&KB,1
R_write格式:&imgUp.imgType,1
R_write图像文件名:&imgUp.imgName,1
R_write文件名:&imgUp.filename,1
R_write扩展名:&imgUp.extName,1
R_write保存位置:&imgUp.DiskPath,1
R_write虚拟路径:&imgUp.XuPath,1
R_write保存后url:&imgUp.NewUrl,1
calltform()
setimgUp=nothing
R_write------------------------<br>传输完毕,0
EndSUB
SUBtform()
%>
<FORMMETHOD=POSTname=form2style=margin:0px;>
获取URL:<INPUTTYPE=textsize=50NAME=GetStrUrlvalue=
保存路径:<INPUTTYPE=textsize=50NAME=SavePathvalue=./><br>
保存文件名:<INPUTTYPE=textsize=50NAME=SaveNamevalue=><br>
保存类型:
<INPUTTYPE=radioNAME=SaveModevalue=1<%ifiSaveMode=1oriSaveMode=thenresponse.writecheckedendif%>>Web图像
<INPUTTYPE=radioNAME=SaveModevalue=2<%ifiSaveMode=2thenresponse.writecheckedendif%>>文本文件
<INPUTTYPE=radioNAME=SaveModevalue=0<%ifiSaveMode=0thenresponse.writecheckedendif%>>二进制数据
<INPUTTYPE=submitvalue=确定提交>
<hrsize=1>
<%
ifGetStrUrl<>then
ifiSaveMode=2then
R_write<buttonname=Previewstitle=页面快照onclick=runCode(0);>Runthiscode</button>,1
R_write<textareacols=100name=contentrows=10style=width:90%;fixed;word-break:break-all;>&server.htmlencode(imgUp.textStr)&</textarea>,1
else
R_write<imgsrc=&imgUp.XuPath&?&timer()&width=&imgUp.width&height=&imgUp.height&alt=&imgUp.imgName&>,1
endif
endif
%>
</FORM>
<hrsize=1>
<br>如果保存为图像,不要加扩展名,自动识别加上,如果加的扩展名不合也回自动加上
<br>保存文件路径为空则保存在当前路径
<br>保存文件名为空则使用自动识别取得的文件名
<br>保存为其他任意方式,对asphtml等为取得发送结果的Html
<%EndSUB
SubR_write(str,num)
dimistr:istr=str
diminum:inum=num
response.writestr&<br>
ifinum=0thenresponse.end
endsub
=================调用过程Execute========================
%>
<!DOCTYPEHTMLPUBLIC-//W3C//DTDHTML4.0Transitional//EN>
<HTML>
<HEAD>
<TITLE>NewDocument</TITLE>
<METANAME=GeneratorCONTENT=EditPlus>
<METANAME=AuthorCONTENT=V37>
<METANAME=KeywordsCONTENT=>
<METANAME=DescriptionCONTENT=>
<SCRIPTLANGUAGE=JavaScript>
<!--
/*functionrunCode()
{
varcode=event.srcElement.parentElement.children[0].value;
varnewwin=window.open(,,);
newwin.opener=null
newwin.document.write(code);
newwin.document.close();
}
functionsetsmiley(what)
{
}*/
functionrunCode(num)//运行代码HTML
{
//varcode=event.srcElement.parentElement.children[0].value;
if(num==0){varcode=window.form2.content.innerText;}
varnewwin=window.open(,,);
newwin.opener=null
newwin.document.write(code);
newwin.document.close();
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<%
dimimgUp传输对象
dimGetStrUrl要获取的图像或网页URL
dimiSaveName要保存的名字
dimiSavePath要保存的虚拟路径
dimiSaveMode保存的模式1为图像0为任意文件
iSavePath=trim(request.form(SavePath))
iSaveName=trim(request.form(SaveName))
GetStrUrl=trim(request.form(GetStrUrl))
iSaveMode=trim(request.form(SaveMode))
ifGetStrUrl<>then
CALLsaveUpload(GetStrUrl,iSavePath,iSaveName,iSaveMode)
calltform()
else
calltform()
endif
%>
</BODY>
</HTML>
文章标题:直接保存URL图像或网页到服务器本地的类
文章链接:http://soscw.com/index.php/essay/10288.html