成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

當前位置:首頁>>開發編程>>ASP>>新聞內容
用正則解析圖片地址,并利用XMLHTTP組件將其保存
作者:chinahuman 發布時間:2003-10-8 2:37:18 文章來源:CSDN

    現在基于WEB頁的HTML的編輯器在新聞系統,文章系統中用得越來越廣,一個網頁一粘就可以保持原來的樣式,同時圖片也可以在這個頁中保持。但是在使用過程中,如果所粘貼頁中的圖片被刪除,就會在自己的頁面上留下一個大大的“X”,影響美觀。以前只好把這個圖片保存下來,再重新上傳到服務器上,這樣實在麻煩。能不能讓服務器自動去下載圖片保存在服務器并且替換頁面上的鏈接?答案是肯定的。
    要實現這個功能需要經過三個步驟:
    一,取得原頁中的圖片的地址。方法很多,可以用分割字符串,也可以用正則匹配。實踐證明用正則匹配最為簡單。經過分析圖片的地址都保存在<img>標簽中。我們可以先取得所有這個標簽。過程如下:
Set objRegExp = New Regexp'設置配置對象
objRegExp.IgnoreCase = True’忽略大小寫
objRegExp.Global = True’設置為全文搜索
objRegExp.Pattern = "<img.+?>"'為了確保能準確地取出圖片地址所以分為兩層配置:首先找到里面的<img>標簽,然后再取出里面的圖片地址后面的getimgs函數就是實現后一個功能的。
strs=trim(str)
Set Matches =objRegExp.Execute(strs)’開始執行配置
For Each Match in Matches
 RetStr = RetStr &getimgs( Match.Value )’執行第二輪的匹配
Next

所有的圖片在里面都是這樣的src="http://圖片的地址",所以可以這樣來取得確切的圖片地址:
function getimgs(str)
getimgs=""
Set objRegExp1 = New Regexp
objRegExp1.IgnoreCase = True
objRegExp1.Global = True
objRegExp1.Pattern = "http://.+?"""’取出里面的地址
set mm=objRegExp1.Execute(str)
 For Each Match1 in mm
getimgs=getimgs&"||"&left(Match1.Value,len(Match1.Value)-1)’把里面的地址串起來備用
next
end function

取得了所有的圖片的地址,我們就可以進行第二步的操作了。
    二,下載圖片并保存在服務器上。這個又可以分為兩個步驟:一個是取得圖片的內容,另一個是保存在服務器上。取得圖片的內容是通過下面的函數來實現的:
function getHTTPPage(url)
on error resume next
dim http
set http=server.createobject("MSXML2.XMLHTTP")‘使用xmlhttp的方法來獲得圖片的內容
Http.open "GET",url,false
Http.send()
if Http.readystate<>4 then
exit function
end if
getHTTPPage=Http.responseBody
set http=nothing
if err.number<>0 then err.Clear
end function
    取得了圖片的內容要保存,給人一種感覺是用FSO來作就可以了,但實際上不行,這樣保存程序就會出錯,因為FSO不支持流式的文件,所以我們要調用另一個對象:ADO.STREM。具體的過程如下:
function saveimage(from,tofile)
dim geturl,objStream,imgs
geturl=trim(from)
imgs=gethttppage(geturl)'取得圖片的具休內容的過程
Set objStream = Server.CreateObject("ADODB.Stream")'建立ADODB.Stream對象,必須要ADO 2.5以上版本
objStream.Type =1'以二進制模式打開
objStream.Open
objstream.write imgs'將字符串內容寫入緩沖
objstream.SaveToFile server.mappath(tofile),2'-將緩沖的內容寫入文件
objstream.Close()'關閉對象
set objstream=nothing
end function
所以只要用一個循環來把剛才取得的地址中的圖片全部保存下來,具體過程如下:
arrimg=split(retstr,"||")'分割字串,取得里面地址列表
allimg=""
newimg=""
for i=1 to ubound(arrimg)
 if arrimg(i)<>"" and instr(allimg,arrimg(i))<1 then'看這個圖片是否已經下載過
 fname=baseurl&cstr(i&mid(arrimg(i),instrrev(arrimg(i),".")))
 saveimage(arrimg(i),fname)‘保存地址的函數,過程見上面
  allimg=allimg&"||"&arrimg(i)'把保存下來的圖片的地址串回起來,以確定要替換的地址
  newimg=newimg&"||"&fname'把本地的地址串回起來
 end if
next
    第三步就是替換原來的地址了。具體的過程就是下面了:
arrnew=split(newimg,"||")'取得原來的圖片地址列表
arrall=split(allimg,"||")'取得已經保存下來的圖片的地址列表
for i=1 to ubound(arrnew)'執行循環替換原來的地址
strs=replace(strs,arrall(i),arrnew(i))
next
cctv=strs
    講到這里,這個函數的基本過程就是這樣了,當然可以對它進行改造就可以實現更多的功能,如:加上圖片大小的限制,加上對本地機上的圖片下載的限制,以免造成重復下載圖片。同時也應該看到這個函數的不足之處是只能處理靜態的圖片文件,不能適用程序生成的圖片。

    大家有什么好的意見和建議可以和我聯系:qq:26452218.我手上已有dll化的這個程序。要的也可以和我聯系。

 


最新更新
·數據庫被掛馬的ASP處理方法
·ASP快速獲取遠程文件大小的方
·用ASP屏蔽迅雷和旋風下載工具
·解決ASP中傳送中文參數亂碼的
·ASP+AJAX做類似Google的搜索
·ASP的一個非常棒的Debug類(
·ASP中常用的服務器檢測源代碼
·優化ASP中執行SQL效率的五個
·ASP種msxml3.dll 800c0005錯
·掛QQ的ASP版本網頁源代碼
相關信息
畫心
愚愛
偏愛
火苗
白狐
畫沙
犯錯
歌曲
傳奇
稻香
小酒窩
獅子座
小情歌
全是愛
棉花糖
海豚音
我相信
甩蔥歌
這叫愛
shero
走天涯
琉璃月
Nobody
我愛他
套馬桿
愛是你我
最后一次
少女時代
灰色頭像
斷橋殘雪
美了美了
狼的誘惑
我很快樂
星月神話
心痛2009
愛丫愛丫
半城煙沙
旗開得勝
郎的誘惑
愛情買賣
2010等你來
我叫小沈陽
i miss you
姑娘我愛你
我們都一樣
其實很寂寞
我愛雨夜花
變心的玫瑰
犀利哥之歌
你是我的眼
你是我的OK繃
貝多芬的悲傷
哥只是個傳說
丟了幸福的豬
找個人來愛我
要嫁就嫁灰太狼
如果這就是愛情
我們沒有在一起
寂寞在唱什么歌
斯琴高麗的傷心
別在我離開之前離開
不是因為寂寞才想你
愛上你等于愛上了錯
在心里從此永遠有個你
一個人的寂寞兩個人的錯
主站蜘蛛池模板: 秦皇岛市| 信阳市| 潼关县| 平湖市| 高安市| 吕梁市| 仲巴县| 武邑县| 长葛市| 成安县| 塔河县| 永川市| 雷山县| 正宁县| 麻阳| 乌兰察布市| 凤城市| 临江市| 齐齐哈尔市| 平陆县| 北流市| 卢湾区| 北安市| 沙湾县| 大宁县| 苏尼特右旗| 临潭县| 措美县| 湟源县| 易门县| 钟祥市| 富阳市| 体育| 晋江市| 中卫市| 海林市| 京山县| 鹤山市| 阳山县| 山东| 东乡|