仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 366|回复: 8
打印 上一主题 下一主题

[学习教程] ASP编程:用XMLHTTP组件准确剖析图片地点并将其保...

[复制链接]
若天明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:34:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。如今基于WEB页的HTML的编纂器在旧事体系,文章体系顶用得愈来愈广,一个网页一粘就能够坚持本来的款式,同时图片也能够在这个页中坚持。可是在利用过程当中,假如所粘贴页中的图片被删除,就会在本人的页面上留下一个年夜年夜的“X”,影响美妙。之前只好把这个图片保留上去,再从头上传到服务器上,如许其实贫苦。能不克不及让服务器主动往下载图片保留在服务器而且交换页面上的链接?谜底是一定的。
要完成这个功效必要经由三个步骤:
一,获得原页中的图片的地点。办法良多,能够用支解字符串,也能够用正则婚配。理论证实用正则婚配最为复杂。经由剖析图片的地点都保留在<img>标签中。我们能够先获得一切这个标签。历程以下:
SetobjRegExp=NewRegexp设置设置工具
objRegExp.IgnoreCase=True’疏忽巨细写
objRegExp.Global=True’设置为全文搜刮
objRegExp.Pattern="<img.+?>"为了确保能正确地掏出图片地点以是分为两层设置:起首找到内里的<img>标签,然后再掏出内里的图片地点前面的getimgs函数就是完成后一个功效的。
strs=trim(str)
SetMatches=objRegExp.Execute(strs)’入手下手实行设置
ForEachMatchinMatches
RetStr=RetStr&getimgs(Match.Value)’实行第二轮的婚配
Next
一切的图片在内里都是如许的src="http://图片的地点",以是能够如许来获得切实的图片地点:
functiongetimgs(str)
getimgs=""
SetobjRegExp1=NewRegexp
objRegExp1.IgnoreCase=True
objRegExp1.Global=True
objRegExp1.Pattern="http://.+?"""’掏出内里的地点
setmm=objRegExp1.Execute(str)
ForEachMatch1inmm
getimgs=getimgs&"||"&left(Match1.Value,len(Match1.Value)-1)’把内里的地点串起来备用
next
endfunction
获得了一切的图片的地点,我们就能够举行第二步的操纵了。
二,下载图片并保留在服务器上。这个又能够分为两个步骤:一个是获得图片的内容,另外一个是保留在服务器上。获得图片的内容是经由过程上面的函数来完成的:
functiongetHTTPPage(url)
onerrorresumenext
dimhttp
sethttp=server.createobject("MSXML2.XMLHTTP")‘利用xmlhttp的办法来取得图片的内容
Http.open"GET",url,false
Http.send()
ifHttp.readystate4then
exitfunction
endif
getHTTPPage=Http.responseBody
sethttp=nothing
iferr.number0thenerr.Clear
endfunction
获得了图片的内容要保留,给人一种感到是用FSO来作就能够了,但实践上不可,如许保留程序就会堕落,由于FSO不撑持流式的文件,以是我们要挪用另外一个工具:ADO.STREM。详细的历程以下:
functionsaveimage(from,tofile)
dimgeturl,objStream,imgs
geturl=trim(from)
imgs=gethttppage(geturl)获得图片的具休内容的历程
SetobjStream=Server.CreateObject("ADODB.Stream")创建ADODB.Stream工具,必需要ADO2.5以上版本
objStream.Type=1以二进制形式翻开
objStream.Open
objstream.writeimgs将字符串内容写进缓冲
objstream.SaveToFileserver.mappath(tofile),2-将缓冲的内容写进文件
objstream.Close()封闭工具
setobjstream=nothing
endfunction
以是只需用一个轮回来把方才获得的地点中的图片全体保留上去,详细历程以下:
arrimg=split(retstr,"||")支解字串,获得内里地点列表
allimg=""
newimg=""
fori=1toubound(arrimg)
ifarrimg(i)""andinstr(allimg,arrimg(i))<1then看这个图片是不是已下载过
fname=baseurl&cstr(i&mid(arrimg(i),instrrev(arrimg(i),".")))
saveimage(arrimg(i),fname)‘保留地点的函数,历程见下面
allimg=allimg&"||"&arrimg(i)把保留上去的图片的地点串回起来,以断定要交换的地点
newimg=newimg&"||"&fname把当地的地点串回起来
endif
next
第三步就是交换本来的地点了。详细的历程就是上面了:
arrnew=split(newimg,"||")获得本来的图片地点列表
arrall=split(allimg,"||")获得已保留上去的图片的地点列表
fori=1toubound(arrnew)实行轮回交换本来的地点
strs=replace(strs,arrall(i),arrnew(i))
next
cctv=strs
讲到这里,这个函数的基础历程就是如许了,固然能够对它举行改革就能够完成更多的功效,如:加上图片巨细的限定,加上对当地机上的图片下载的限定,以避免形成反复下载图片。同时也应当看到这个函数的不敷的地方是只能处置静态的图片文件,不克不及合用程序天生的图片。
缺点:正版成本价格贵(盗版就不说了)、不够安全,大多数服务器用windows系统,没有linux安全
若天明 该用户已被删除
沙发
 楼主| 发表于 2015-1-19 17:36:12 | 只看该作者
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
变相怪杰 该用户已被删除
板凳
发表于 2015-1-25 10:46:45 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
小妖女 该用户已被删除
地板
发表于 2015-2-2 21:42:50 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
分手快乐 该用户已被删除
5#
发表于 2015-2-8 07:19:26 | 只看该作者
运用经典的例子。并且自己可以用他来实现一些简单的系统。如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。
不帅 该用户已被删除
6#
发表于 2015-2-24 23:27:43 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
柔情似水 该用户已被删除
7#
发表于 2015-3-7 13:54:29 | 只看该作者
Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点)
冷月葬花魂 该用户已被删除
8#
发表于 2015-3-15 07:29:14 | 只看该作者
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
只想知道 该用户已被删除
9#
发表于 2015-3-21 20:49:20 | 只看该作者
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-16 22:46

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表