De nos jours, les éditeurs HTML basés sur le WEB sont de plus en plus utilisés dans les systèmes d'actualités et les systèmes d'articles. Une fois le réseau collé, le style original peut être conservé, ainsi que les images. Cependant, lors de l'utilisation, si l'image collée est supprimée, un grand « X » sera laissé sur le visage, ce qui affecte l'apparence. Dans le passé, je devais enregistrer cette image, puis la télécharger à nouveau sur le serveur, ce qui était vraiment gênant. Le serveur peut-il télécharger automatiquement l'image, l'enregistrer sur le serveur et remplacer le lien sur la page ? La réponse est oui.
Trois étapes sont nécessaires pour mettre en œuvre cette fonction :
1. Obtenez l'adresse de l'image originale. Il existe de nombreuses méthodes, vous pouvez utiliser des chaînes de fractionnement ou une correspondance régulière. La pratique a prouvé que l'appariement régulier est le plus simple. Les adresses des images analysées sont enregistrées dans la balise <img>. Nous pouvons d'abord récupérer toutes ces balises. Le processus est le suivant :
Set objRegExp = Nouvel objet de configuration Regexp'set
objRegExp.IgnoreCase = True'Ignorer la casse
objRegExp.Global = True' défini sur la recherche en texte intégral
objRegExp.Pattern = "<img.+?>"'Afin de garantir que l'adresse de l'image puisse être récupérée avec précision, elle est divisée en deux niveaux de configuration : recherchez d'abord la balise <img> à l'intérieur, puis récupérez l'adresse de l'image à l'intérieur. La fonction getimgs derrière est implémentée.
strs=trim(str)
Set Matches =objRegExp.Execute(strs)'Démarrer l'exécution de la configuration
Pour chaque match dans les matchs
RetStr = RetStr &getimgs( Match.Value )'Effectuer le deuxième tour de correspondance
Toutes les images dans
Next
ont src="http://adresse de l'image", vous pouvez donc obtenir l'adresse exacte de l'image comme ceci :
fonction getimgs(str)
getimgs=""
Définir objRegExp = Nouvelle expression rationnelle
objRegExp.IgnoreCase = True
objRegExp.Global = Vrai
objRegExp.Pattern = " http://.+?"""' Supprimez l'adresse à l'intérieur
set mm=objRegExp.Execute(str)
Pour chaque correspondance en mm
getimgs=getimgs&"||"&left(Match.Value,len(Match.Value)-)' chaîne les adresses à l'intérieur pour une utilisation ultérieure
suivant
La fonction end
a obtenu les adresses de toutes les images, et nous pouvons passer à la deuxième étape.
Deuxièmement, téléchargez l'image et enregistrez-la sur le serveur. Cela peut être divisé en deux étapes : l’une consiste à obtenir le contenu de l’image et l’autre à la sauvegarder sur le serveur. L'obtention du contenu de l'image s'effectue grâce à la fonction suivante :
fonction getHTTPage(url)
en cas d'erreur, reprendre ensuite
atténué http
set http=server.createobject("MSXML.XMLHTTP")'Utilisez la méthode xmlhttp pour obtenir le contenu de l'image
Http.open "GET",url,false
Http.envoyer()
si Http.readystate<> alors
fonction de sortie
finir si
getHTTPPage=Http.responseBody
définir http = rien
si err.number<>0 alors err.Clear
fonction de fin
Après avoir obtenu le contenu de l'image, nous devons la sauvegarder. Cela donne l'impression que cela peut être fait avec FSO, mais en fait, ce n'est pas possible, le programme de sauvegarde générera une erreur car FSO ne prend pas en charge le streaming. fichiers, nous devons donc appeler un autre objet. Le processus spécifique est le suivant :
fonction saveimage (de, vers un fichier)
faible geturl, objStream, imgs
geturl=trim(de)
imgs=gethttppage(geturl)'Le processus d'obtention du contenu spécifique de l'image
Set objStream = Server.CreateObject("ADODB.Stream")' Pour créer un objet ADODB.Stream, vous devez disposer d'ADO ou supérieur.
objStream.Type ='Ouvrir en mode binaire
objStream.Open
objstream.write imgs' écrit le contenu de la chaîne dans le tampon
objstream.SaveToFile server.mappath(tofile),'-Écrit le contenu mis en mémoire tampon dans le fichier
objstream.Close()'Fermer l'objet
définir objstream = rien
fonction de fin
Il suffit donc d'utiliser une boucle pour sauvegarder toutes les images à l'adresse que vous venez d'obtenir. Le processus spécifique est le suivant :
arrimg=split(retstr,"||")'Divisez la chaîne et récupérez la liste d'adresses à l'intérieur
allimg=""
nouveauimg=""
pour i= vers ubound(arrimg)
if arrimg(i)<>"" et instr(allimg,arrimg(i))< then' Vérifiez si cette image a été téléchargée
fname=baseurl&cstr(i&mid(arrimg(i),instrrev(arrimg(i),".")))
fonction saveimage(arrimg(i),fname)' pour enregistrer l'adresse, voir le processus ci-dessus
allimg=allimg&"||"&arrimg(i)' Chaînez les adresses des images enregistrées ensemble pour déterminer l'adresse à remplacer
newimg=newimg&"||"&fname' reconstitue l'adresse locale
finir si
suivant
La troisième étape consiste à remplacer l'adresse d'origine. Le processus spécifique est le suivant :
arrnew=split(newimg,"||")'Obtenir la liste d'adresses de l'image d'origine
arrall=split(allimg,"||")'Obtenir la liste d'adresses des images enregistrées
for i= to ubound(arrnew)' exécute une boucle pour remplacer l'adresse d'origine
strs=replace(strs,arrall(i),arrnew(i))
suivant
vidéosurveillance=strs
Cela dit, le processus de base de cette fonction est le suivant. Bien sûr, elle peut être modifiée pour obtenir plus de fonctions, telles que : ajouter des restrictions sur la taille de l'image et ajouter des restrictions sur les téléchargements d'images sur la machine locale pour éviter la duplication. . Dans le même temps, il convient également de noter que l'inconvénient de cette fonction est qu'elle ne peut traiter que des fichiers d'images statiques et ne peut pas être utilisée pour les images générées par le programme.