導讀:
現在基于WEB頁的HTML的編輯器在新聞系統,文章系統中用得越來越廣,一個網頁一粘就可以保持原來的樣式,同時圖片也可以在這個頁中保持。但是在使用過程中,如果所粘貼頁中的圖片被刪除,就會在自己的頁面上留下一個大大的“X”,影響美觀。以前只好把這個圖片保存下來,再重新上傳到服務器上,這樣實在麻煩。能不能讓服務器自動去下載圖片保存在服務器并且替換頁面上的鏈接?答案是肯定的。
要實現這個功能需要經過三個步驟:
一,取得原頁中的圖片的地址。方法很多,可以用分割字符串,也可以用正則匹配。實踐證明用正則匹配最為簡單。經過分析圖片的地址都保存在
標簽中。我們可以先取得所有這個標簽。過程如下:
Set objRegExp = New Regexp'設置配置對象
objRegExp.IgnoreCase = True’忽略大小寫
objRegExp.Global = True’設置為全文搜索
objRegExp.Pattern = "<img.>"'為了確保能準確地取出圖片地址所以分為兩層配置:首先找到里面的<img>標簽,然后再取出里面的圖片地址后面的getimgs函數就是實現后一個功能的。 <br> strs=trim(str) <br> Set Matches =objRegExp.Execute(strs)’開始執行配置 <br> For Each Match in Matches <br> RetStr = RetStr &getimgs( Match.Value )’執行第二輪的匹配 <br> Next <br> 所有的圖片在里面都是這樣的src="http://圖片的地址",所以可以這樣來取得確切的圖片地址: <br> function getimgs(str) <br> getimgs="" <br> Set objRegExp1 = New Regexp <br> objRegExp1.IgnoreCase = True <br> objRegExp1.Global = True <br> objRegExp1.Pattern = "http://.+?"""’取出里面的地址 <br> set mm=objRegExp1.Execute(str) <br> For Each Match1 in mm <br> getimgs=getimgs&"||"&left(Match1.Value,len(Match1.Value)-1)’把里面的地址串起來備用 <br> next <br> end function <br> 取得了所有的圖片的地址,我們就可以進行第二步的操作了。 <br> 二,下載圖片并保存在服務器上。這個又可以分為兩個步驟:一個是取得圖片的內容,另一個是保存在服務器上。取得圖片的內容是通過下面的函數來實現的: <br> function getHTTPPage(url) <br> on error resume next <br> dim http <br> set http=server.createobject("MSXML2.XMLHTTP")‘使用XMLhttp的方法來獲得圖片的內容 <br> Http.open "GET",url,false <br> Http.send() <br> if Http.readystate4 then <br> exit function <br> end if <br> getHTTPPage=Http.responseBody <br> set http=nothing <br> if err.number0 then err.Clear <br> end function <br> 取得了圖片的內容要保存,給人一種感覺是用FSO來作就可以了,但實際上不行,這樣保存程序就會出錯,因為FSO不支持流式的文件,所以我們要調用另一個對象:ADO.STREM。具體的過程如下: <br> function saveimage(from,tofile) <br> dim geturl,objStream,imgs <br> geturl=trim(from) <br> imgs=gethttppage(geturl)'取得圖片的具休內容的過程 <br> Set objStream = Server.CreateObject("ADODB.Stream")'建立ADODB.Stream對象,必須要ADO 2.5以上版本 <br> objStream.Type =1'以二進制模式打開 <br> objStream.Open <br> objstream.write imgs'將字符串內容寫入緩沖 <br> objstream.SaveToFile server.mappath(tofile),2'-將緩沖的內容寫入文件 <br> objstream.Close()'關閉對象 <br> set objstream=nothing <br> end function <br> 所以只要用一個循環來把剛才取得的地址中的圖片全部保存下來,具體過程如下: <br> arrimg=split(retstr,"||")'分割字串,取得里面地址列表 <br> allimg="" <br> newimg="" <br> for i=1 to ubound(arrimg) <br> if arrimg(i)"" and instr(allimg,arrimg(i)) fname=baseurl&cstr(i&mid(arrimg(i),instrrev(arrimg(i),"."))) <br> saveimage(arrimg(i),fname)‘保存地址的函數,過程見上面 <br> allimg=allimg&"||"&arrimg(i)'把保存下來的圖片的地址串回起來,以確定要替換的地址 <br> newimg=newimg&"||"&fname'把本地的地址串回起來 <br> end if <br> next <br> 第三步就是替換原來的地址了。具體的過程就是下面了: <br> arrnew=split(newimg,"||")'取得原來的圖片地址列表 <br> arrall=split(allimg,"||")'取得已經保存下來的圖片的地址列表 <br> for i=1 to ubound(arrnew)'執行循環替換原來的地址 <br> strs=replace(strs,arrall(i),arrnew(i)) <br> next <br> cctv=strs <br> 講到這里,這個函數的基本過程就是這樣了,當然可以對它進行改造就可以實現更多的功能,如:加上圖片大小的限制,加上對本地機上的圖片下載的限制,以免造成重復下載圖片。同時也應該看到這個函數的不足之處是只能處理靜態的圖片文件,不能適用程序生成的圖片。 <br> 大家有什么好的意見和建議可以和我聯系:qq:26452218.我手上已有dll化的這個程序。要的也可以和我聯系。 <br><br>本文轉自 <br><a >http://study.qqcf.com/web/251/31560.htm</a></img.>
現在基于WEB頁的HTML的編輯器在新聞系統,文章系統中用得越來越廣,一個網頁一粘就可以保持原來的樣式,同時圖片也可以在這個頁中保持。但是在使用過程中,如果所粘貼頁中的圖片被刪除,就會在自己的頁面上留下一個大大的“X”,影響美觀。以前只好把這個圖片保存下來,再重新上傳到服務器上,這樣實在麻煩。能不能讓服務器自動去下載圖片保存在服務器并且替換頁面上的鏈接?答案是肯定的。
要實現這個功能需要經過三個步驟:
一,取得原頁中的圖片的地址。方法很多,可以用分割字符串,也可以用正則匹配。實踐證明用正則匹配最為簡單。經過分析圖片的地址都保存在
Set objRegExp = New Regexp'設置配置對象
objRegExp.IgnoreCase = True’忽略大小寫
objRegExp.Global = True’設置為全文搜索
objRegExp.Pattern = "<img.>"'為了確保能準確地取出圖片地址所以分為兩層配置:首先找到里面的<img>標簽,然后再取出里面的圖片地址后面的getimgs函數就是實現后一個功能的。 <br> strs=trim(str) <br> Set Matches =objRegExp.Execute(strs)’開始執行配置 <br> For Each Match in Matches <br> RetStr = RetStr &getimgs( Match.Value )’執行第二輪的匹配 <br> Next <br> 所有的圖片在里面都是這樣的src="http://圖片的地址",所以可以這樣來取得確切的圖片地址: <br> function getimgs(str) <br> getimgs="" <br> Set objRegExp1 = New Regexp <br> objRegExp1.IgnoreCase = True <br> objRegExp1.Global = True <br> objRegExp1.Pattern = "http://.+?"""’取出里面的地址 <br> set mm=objRegExp1.Execute(str) <br> For Each Match1 in mm <br> getimgs=getimgs&"||"&left(Match1.Value,len(Match1.Value)-1)’把里面的地址串起來備用 <br> next <br> end function <br> 取得了所有的圖片的地址,我們就可以進行第二步的操作了。 <br> 二,下載圖片并保存在服務器上。這個又可以分為兩個步驟:一個是取得圖片的內容,另一個是保存在服務器上。取得圖片的內容是通過下面的函數來實現的: <br> function getHTTPPage(url) <br> on error resume next <br> dim http <br> set http=server.createobject("MSXML2.XMLHTTP")‘使用XMLhttp的方法來獲得圖片的內容 <br> Http.open "GET",url,false <br> Http.send() <br> if Http.readystate4 then <br> exit function <br> end if <br> getHTTPPage=Http.responseBody <br> set http=nothing <br> if err.number0 then err.Clear <br> end function <br> 取得了圖片的內容要保存,給人一種感覺是用FSO來作就可以了,但實際上不行,這樣保存程序就會出錯,因為FSO不支持流式的文件,所以我們要調用另一個對象:ADO.STREM。具體的過程如下: <br> function saveimage(from,tofile) <br> dim geturl,objStream,imgs <br> geturl=trim(from) <br> imgs=gethttppage(geturl)'取得圖片的具休內容的過程 <br> Set objStream = Server.CreateObject("ADODB.Stream")'建立ADODB.Stream對象,必須要ADO 2.5以上版本 <br> objStream.Type =1'以二進制模式打開 <br> objStream.Open <br> objstream.write imgs'將字符串內容寫入緩沖 <br> objstream.SaveToFile server.mappath(tofile),2'-將緩沖的內容寫入文件 <br> objstream.Close()'關閉對象 <br> set objstream=nothing <br> end function <br> 所以只要用一個循環來把剛才取得的地址中的圖片全部保存下來,具體過程如下: <br> arrimg=split(retstr,"||")'分割字串,取得里面地址列表 <br> allimg="" <br> newimg="" <br> for i=1 to ubound(arrimg) <br> if arrimg(i)"" and instr(allimg,arrimg(i)) fname=baseurl&cstr(i&mid(arrimg(i),instrrev(arrimg(i),"."))) <br> saveimage(arrimg(i),fname)‘保存地址的函數,過程見上面 <br> allimg=allimg&"||"&arrimg(i)'把保存下來的圖片的地址串回起來,以確定要替換的地址 <br> newimg=newimg&"||"&fname'把本地的地址串回起來 <br> end if <br> next <br> 第三步就是替換原來的地址了。具體的過程就是下面了: <br> arrnew=split(newimg,"||")'取得原來的圖片地址列表 <br> arrall=split(allimg,"||")'取得已經保存下來的圖片的地址列表 <br> for i=1 to ubound(arrnew)'執行循環替換原來的地址 <br> strs=replace(strs,arrall(i),arrnew(i)) <br> next <br> cctv=strs <br> 講到這里,這個函數的基本過程就是這樣了,當然可以對它進行改造就可以實現更多的功能,如:加上圖片大小的限制,加上對本地機上的圖片下載的限制,以免造成重復下載圖片。同時也應該看到這個函數的不足之處是只能處理靜態的圖片文件,不能適用程序生成的圖片。 <br> 大家有什么好的意見和建議可以和我聯系:qq:26452218.我手上已有dll化的這個程序。要的也可以和我聯系。 <br><br>本文轉自 <br><a >http://study.qqcf.com/web/251/31560.htm</a></img.>
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
