요즘에는 뉴스 시스템과 기사 시스템에서 웹 기반 HTML 편집기가 점점 더 널리 사용되고 있습니다. 네트워크를 붙여넣으면 원본 스타일을 유지할 수 있고 여기에 사진도 유지할 수 있습니다. 하지만 사용 중 붙여넣은 사진을 삭제하면 얼굴에 큰 'X' 표시가 남게 되어 외모에 영향을 미치게 됩니다. 예전에는 이 이미지를 저장했다가 다시 서버에 업로드해야 하는 번거로움이 정말 많았습니다. 서버가 자동으로 이미지를 다운로드 받아 서버에 저장하고 페이지의 링크를 교체할 수 있나요? 대답은 '예'입니다.
이 기능을 구현하려면 세 단계가 필요합니다.
1. 원본 사진의 주소를 알아냅니다. 많은 방법이 있습니다. 문자열 분할을 사용하거나 일반 일치를 사용할 수 있습니다. 실습을 통해 정기적인 매칭이 가장 간단하다는 것이 입증되었습니다. 분석된 이미지의 주소는 <img> 태그에 저장됩니다. 먼저 이 태그를 모두 얻을 수 있습니다. 프로세스는 다음과 같습니다.
Set objRegExp = New Regexp'set 구성 객체
objRegExp.IgnoreCase = True'대소문자 무시
objRegExp.Global = True'가 전체 텍스트 검색으로 설정됨
objRegExp.Pattern = "<img.+?>"'이미지 주소를 정확하게 검색할 수 있도록 하기 위해 두 가지 구성 수준으로 나뉩니다. 먼저 내부에서 <img> 태그를 찾은 다음 이미지 주소를 검색합니다. 내부에 getimgs 함수가 구현되어 있습니다.
strs=트림(str)
Set Matches =objRegExp.Execute(strs)'구성 실행 시작
경기의 각 경기에 대해
RetStr = RetStr &getimgs( Match.Value )' 두 번째 매칭 라운드 수행
Next
의 모든 이미지에는
src="http://image address"가 있으므로 다음과 같이 정확한 이미지 주소를 얻을 수 있습니다.
함수 getimgs(str)
getimgs=""
objRegExp = 새 Regexp 설정
objRegExp.IgnoreCase = 참
objRegExp.Global = 참
objRegExp.Pattern = " http://.+?"""' 내부 주소를 꺼내세요
mm=objRegExp.Execute(str) 설정
각 일치 항목(mm)
getimgs=getimgs&"||"&left(Match.Value,len(Match.Value)-)' 문자열은 나중에 사용하기 위해 내부 주소입니다.
다음
end 함수는
모든 사진의 주소를 얻었고, 두 번째 단계로 진행할 수 있습니다.
둘째, 이미지를 다운로드하여 서버에 저장합니다. 이는 두 단계로 나눌 수 있습니다. 하나는 이미지의 내용을 얻는 것이고, 다른 하나는 서버에 저장하는 것입니다. 이미지의 내용을 얻는 것은 다음 함수를 통해 이루어집니다:
함수 getHTTPage(url)
오류 발생 시 다음 재개
희미한 http
set http=server.createobject("MSXML.XMLHTTP")'xmlhttp 메소드를 사용하여 이미지의 내용을 가져옵니다.
Http.open "GET", URL, false
Http.send()
Http.readystate<>이면
종료 기능
종료하면
getHTTPPage=Http.responseBody
http=아무것도 설정하지 않음
err.number<>0이면 err.Clear
함수 종료
사진의 내용을 얻은 후에는 저장해야 합니다. FSO를 사용하면 가능하다는 인상을 주지만 실제로는 FSO가 스트리밍을 지원하지 않기 때문에 저장 프로그램에 오류가 발생합니다. 파일이 있으므로 다른 개체를 호출해야 합니다. :ADO.STREM. 구체적인 과정은 다음과 같습니다.
함수 saveimage(from,tofile)
희미한 geturl,objStream,imgs
geturl=트림(from)
imgs=gethttppage(geturl)'이미지의 특정 내용을 얻는 과정
Set objStream = Server.CreateObject("ADODB.Stream")' ADODB.Stream 개체를 만들려면 ADO 이상이 있어야 합니다.
objStream.Type ='바이너리 모드로 열기
objStream.Open
objstream.write imgs'는 문자열 내용을 버퍼에 씁니다.
objstream.SaveToFile server.mappath(tofile),'-버퍼링된 콘텐츠를 파일에 씁니다.
objstream.Close()'객체 닫기
objstream=아무것도 설정하지 않음
함수 종료
따라서 루프를 사용하여 방금 얻은 주소의 모든 사진을 저장하면 됩니다. 구체적인 프로세스는 다음과 같습니다.
arrimg=split(retstr,"||")'문자열을 분할하고 내부의 주소 목록을 가져옵니다.
알림=""
newimg=""
i= ubound(arrimg)로
if arrimg(i)<>"" and instr(allimg,arrimg(i))< then' 이 사진이 다운로드되었는지 확인하세요.
fname=baseurl&cstr(i&mid(arrimg(i),instrrev(arrimg(i),".")))
saveimage(arrimg(i),fname)' 함수를 사용하여 주소를 저장합니다. 위 프로세스를 참조하세요.
allimg=allimg&"||"&arrimg(i)' 저장된 사진의 주소를 문자열로 묶어서 교체할 주소를 결정합니다.
newimg=newimg&"||"&fname' 문자열은 로컬 주소를 다시 합칩니다.
종료하면
다음
세 번째 단계는 원래 주소를 바꾸는 것입니다. 구체적인 과정은 다음과 같습니다.
arrnew=split(newimg,"||")'원본 이미지 주소 목록 가져오기
arrall=split(allimg,"||")'저장된 사진의 주소 목록을 가져옵니다
for i= to ubound(arrnew)'는 원래 주소를 대체하기 위해 루프를 실행합니다.
strs=replace(strs,arrall(i),arrnew(i))
다음
CCTV=strs
하지만 이 기능의 기본 프로세스는 다음과 같습니다. 물론 이미지 크기에 대한 제한을 추가하고 이미지 다운로드를 피하기 위해 로컬 컴퓨터에 이미지 다운로드에 대한 제한을 추가하는 등 더 많은 기능을 구현하도록 수정할 수 있습니다. . 동시에, 이 기능의 단점은 정적 이미지 파일만 처리할 수 있고 프로그램에서 생성된 이미지에는 사용할 수 없다는 점에 유의해야 합니다.