في الوقت الحاضر، يتم استخدام محررات HTML المستندة إلى الويب على نطاق واسع في أنظمة الأخبار وأنظمة المقالات، ويمكن الحفاظ على النمط الأصلي بمجرد لصق الشبكة، ويمكن أيضًا الحفاظ على الصور في هذا. ومع ذلك، أثناء الاستخدام، إذا تم حذف الصورة الملصقة، فسيتم ترك علامة "X" كبيرة على الوجه، مما يؤثر على المظهر. في الماضي، كان علي حفظ هذه الصورة ثم تحميلها على الخادم مرة أخرى، الأمر الذي كان مزعجًا حقًا. هل يستطيع الخادم تنزيل الصورة تلقائيًا وحفظها على الخادم واستبدال الرابط الموجود في الصفحة؟ الجواب هو نعم.
مطلوب ثلاث خطوات لتنفيذ هذه الوظيفة:
1. احصل على عنوان الصورة الأصلية. هناك العديد من الطرق، يمكنك استخدام تقسيم السلاسل، أو يمكنك استخدام المطابقة العادية. لقد أثبتت الممارسة أن المطابقة المنتظمة هي الأبسط. يتم حفظ عناوين الصور التي تم تحليلها في العلامة <img>. يمكننا الحصول على كل هذه العلامة أولا. العملية هي كما يلي:
Set objRegExp = كائن تكوين مجموعة Regexp الجديد
objRegExp.IgnoreCase = True'تجاهل حالة الأحرف
objRegExp.Global = True' تم ضبطه على البحث عن النص الكامل
objRegExp.Pattern = "<img.+?>"'للتأكد من إمكانية استرداد عنوان الصورة بدقة، تم تقسيمها إلى مستويين من التكوين: ابحث أولاً عن علامة <img> بالداخل، ثم استرد عنوان الصورة يتم تنفيذ وظيفة getimgs الموجودة خلفها.
سترس = تقليم (شارع)
تعيين التطابقات =objRegExp.Execute(strs)'بدء تنفيذ التكوين
لكل مباراة في المباريات
RetStr = RetStr &getimgs( Match.Value )'إجراء الجولة الثانية من المطابقة
جميع الصور في
Next
تحتوي على src="http://image Address"، حتى تتمكن من الحصول على عنوان الصورة الدقيق مثل هذا:
دالة getimgs(str)
getimgs = ""
تعيين objRegExp = New Regexp
objRegExp.IgnoreCase = صحيح
objRegExp.Global = صحيح
objRegExp.Pattern = " http://.+؟"""' أخرج العنوان الموجود بالداخل
تعيين مم=objRegExp.Execute(str)
لكل مباراة بالملليمتر
getimgs=getimgs&"||"&left(Match.Value,len(Match.Value)-)' سلسلة العناوين الموجودة بالداخل لاستخدامها لاحقًا
التالي
الدالة النهائية
على عناوين جميع الصور، ويمكننا المتابعة إلى الخطوة الثانية.
ثانيا، قم بتنزيل الصورة وحفظها على الخادم. يمكن تقسيم ذلك إلى خطوتين: إحداهما الحصول على محتوى الصورة، والأخرى حفظها على الخادم. ويتم الحصول على محتوى الصورة من خلال الوظيفة التالية:
وظيفة getHTTPage(url)
على خطأ استئناف المقبل
خافت http
تعيين http=server.createobject("MSXML.XMLHTTP")'استخدم طريقة xmlhttp للحصول على محتوى الصورة
Http.open "GET"، URL، خطأ
المتشعب.إرسال ()
إذا Http.readystate<> ثم
وظيفة الخروج
نهاية إذا
getHTTPPage=Http.responseBody
تعيين http=لا شيء
إذا كان err.number<>0 ثم err.Clear
وظيفة النهاية
بعد الحصول على محتوى الصورة، نحتاج إلى حفظها، وهذا يعطي الناس انطباعًا بأنه يمكن القيام بذلك باستخدام FSO، لكن في الواقع هذا غير ممكن، وبهذه الطريقة، سيخطأ برنامج الحفظ لأن FSO لا يدعم البث الملفات، لذلك يتعين علينا استدعاء كائن آخر: ADO.STREM. العملية المحددة هي كما يلي:
وظيفة حفظ الصورة (من، إلى الملف)
خافت geturl،objStream،imgs
geturl = تقليم (من)
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،"||")'قم بتقسيم السلسلة واحصل على قائمة العناوين بالداخل
أليمج = ""
نيويمج = ""
لأني= إلى ubound(arrimg)
إذا arrimg(i)<>"" و instr(allimg,arrimg(i))< ثم تحقق مما إذا كان قد تم تنزيل هذه الصورة أم لا
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))
التالي
الدوائر التلفزيونية المغلقة=strs
ومع ذلك، فإن العملية الأساسية لهذه الوظيفة هي هكذا بالطبع، ويمكن تعديلها لتحقيق المزيد من الوظائف، مثل: إضافة قيود على حجم الصورة وإضافة قيود على تنزيلات الصور على الجهاز المحلي لتجنب تكرار تنزيل الصورة . وفي الوقت نفسه، تجدر الإشارة أيضًا إلى أن عيب هذه الوظيفة هو أنها يمكنها معالجة ملفات الصور الثابتة فقط ولا يمكن استخدامها للصور التي ينشئها البرنامج.