Hoje em dia, editores HTML baseados na WEB são cada vez mais usados em sistemas de notícias e sistemas de artigos. O estilo original pode ser mantido depois que uma rede é colada, e as imagens também podem ser mantidas nela. Porém, durante o uso, se a imagem colada for excluída, um grande “X” ficará no rosto, o que afetará a aparência. No passado, eu tinha que salvar esta imagem e carregá-la novamente no servidor, o que era realmente problemático. O servidor pode baixar automaticamente a imagem, salvá-la no servidor e substituir o link na página? A resposta é sim.
Três etapas são necessárias para implementar esta função:
1. Obtenha o endereço da imagem original. Existem muitos métodos, você pode usar a divisão de strings ou a correspondência regular. A prática provou que a correspondência regular é a mais simples. Os endereços das imagens analisadas são salvos na tag <img>. Podemos obter toda essa tag primeiro. O processo é o seguinte:
Definir objRegExp = Novo objeto de configuração do conjunto de Regexp
objRegExp.IgnoreCase = True'Ignorar caso
objRegExp.Global = True' definido para pesquisa de texto completo
objRegExp.Pattern = "<img.+?>"'Para garantir que o endereço da imagem possa ser recuperado com precisão, ele é dividido em dois níveis de configuração: primeiro encontre a tag <img> dentro e, em seguida, recupere o endereço da imagem dentro. A função getimgs por trás dela é implementada.
strs=cortar(str)
Definir correspondências =objRegExp.Execute(strs)'Iniciar execução da configuração
Para cada partida nas partidas
RetStr = RetStr &getimgs( Match.Value )'Execute a segunda rodada de correspondência
Todas as imagens em
Next
têm src="http://endereço da imagem", então você pode obter o endereço exato da imagem assim:
função getimgs(str)
getimgs=""
Definir objRegExp = Novo Regexp
objRegExp.IgnoreCase = Verdadeiro
objRegExp.Global = Verdadeiro
objRegExp.Pattern = " http://.+?"""' Retire o endereço dentro
definir mm = objRegExp.Execute (str)
Para cada partida em mm
getimgs=getimgs&"||"&left(Match.Value,len(Match.Value)-)' string os endereços internos para uso posterior
próximo
A função final
obteve os endereços de todas as imagens e podemos prosseguir para a segunda etapa.
Segundo, baixe a imagem e salve-a no servidor. Isso pode ser dividido em duas etapas: uma é obter o conteúdo da imagem e a outra é salvá-la no servidor. A obtenção do conteúdo da imagem é realizada através da seguinte função:
função getHTTPage(url)
em caso de erro, retome a seguir
escurecer http
set http=server.createobject("MSXML.XMLHTTP")'Use o método xmlhttp para obter o conteúdo da imagem
Http.open "GET",url,falso
http.send()
se Http.readystate<> então
função de saída
terminar se
getHTTPPage=Http.responseBody
definir http = nada
se err.número<>0 então err.Clear
função final
Depois de obter o conteúdo da imagem, precisamos salvá-la. Dá a impressão de que isso pode ser feito com o FSO, mas na verdade não é possível, o programa de salvamento apresentará erro porque o FSO não suporta streaming. arquivos, então temos que chamar outro objeto: ADO.STREM. O processo específico é o seguinte:
função salvar imagem (de, para arquivo)
dim geturl,objStream,imgs
geturl=cortar(de)
imgs=gethttppage(geturl)'O processo de obtenção do conteúdo específico da imagem
Set objStream = Server.CreateObject("ADODB.Stream")' Para criar um objeto ADODB.Stream, você deve ter ADO ou superior.
objStream.Type ='Abrir em modo binário
objStream.Open
objstream.write imgs' grava o conteúdo da string no buffer
objstream.SaveToFile server.mappath(tofile),'-grava o conteúdo em buffer no arquivo
objstream.Close()'Fecha o objeto
definir objstream = nada
função final
Então basta usar um loop para salvar todas as fotos no endereço que acabamos de obter. O processo específico é o seguinte:
arrimg=split(retstr,"||")'Divida a string e obtenha a lista de endereços dentro
allimg=""
novaimg=""
para i= para ubound(arrimg)
if arrimg(i)<>"" and instr(allimg,arrimg(i))< then' Verifique se esta imagem foi baixada
fname=baseurl&cstr(i&mid(arrimg(i),instrrev(arrimg(i),".")))
função saveimage(arrimg(i),fname)' para salvar o endereço, veja o processo acima
allimg=allimg&"||"&arrimg(i)' Seque os endereços das imagens salvas para determinar o endereço a ser substituído
newimg=newimg&"||"&fname' junta o endereço local novamente
terminar se
próximo
A terceira etapa é substituir o endereço original. O processo específico é o seguinte:
arrnew=split(newimg,"||")'Obtém a lista de endereços da imagem original
arrall=split(allimg,"||")'Obtém a lista de endereços das imagens salvas
for i= to ubound(arrnew)' executa um loop para substituir o endereço original
strs=substituir(strs,arrall(i),arrnew(i))
próximo
cctv=strs
Dito isto, o processo básico desta função é o seguinte. Claro, ela pode ser modificada para obter mais funções, como: adicionar restrições ao tamanho da imagem e adicionar restrições ao download de imagens na máquina local para evitar duplicação de imagens. . Ao mesmo tempo, deve-se notar também que a desvantagem desta função é que ela só pode processar arquivos de imagem estática e não pode ser usada para imagens geradas pelo programa.