الملخص: في بيئة التطبيقات المعتمدة على المتصفح/الخادم، كان تحميل أنواع مختلفة من الملفات في المتصفح دائمًا إحدى المشكلات التي تعاني منها تطبيقات إدارة الملفات لدى المستخدمين. هناك ثلاث آليات لتحميل الملفات عبر HTTP: RFC1867، وPUT، وWebDAV. إحدى طرق التنفيذ الشائعة هي استخدام نوع جديد تم تقديمه في RFC1867: كائنات File وADO Stream. تتناول هذه المقالة طرق التحميل ومبادئ التنفيذ المذكورة أعلاه، وتقدم أمثلة محددة للحلول.
الكلمات الأساسية: كائن ملف مكون ASP
حاليًا، تعد التطبيقات المستندة إلى طراز المتصفح/الخادم أكثر شيوعًا. عندما يحتاج المستخدمون إلى نقل الملفات إلى الخادم، تتمثل إحدى الطرق الشائعة في تشغيل خادم FTP وتعيين دليل FTP الافتراضي لكل مستخدم كدليل ويب رئيسي للمستخدم، بحيث يمكن للمستخدم تشغيل برنامج عميل FTP وتحميل الملفات إلى دليل الويب المحدد. وهذا يتطلب من المستخدمين معرفة كيفية استخدام برنامج عميل FTP. ولذلك، فإن هذا الحل مناسب فقط للمستخدمين ذوي الخبرة والمعتادين على بروتوكول نقل الملفات (FTP). إذا تمكنا من دمج وظيفة تحميل الملفات مع الويب حتى يتمكن المستخدمون من إكمال مهمة التحميل باستخدام متصفح الويب فقط، فسيكون ذلك مناسبًا جدًا لهم. ومع ذلك، نظرًا للقيود التي تمنع كائن نظام الملفات من نقل الملفات النصية فقط، فإن أكبر مشكلة في ASP هي تحميل الملفات. فيما يلي وصف لكيفية تحميل الملفات في صفحة ويب بناءً على بروتوكول HTTP.
واحد. ثلاث آليات للتحميل عبر HTTP
هناك ثلاث آليات للتحميل عبر HTTP: RFC1867، وPUT، وWebDAV.
PUT هو فعل HTTP جديد تم تقديمه في HTTP 1.1. عندما يتلقى خادم الويب HTTP PUT واسم الكائن، فإنه يقوم بالمصادقة على المستخدم، ويتلقى محتويات دفق HTTP، ويخزنها مباشرة في خادم الويب. ونظرًا لأن هذا قد يؤدي إلى تعطيل موقع الويب، فإنه يفقد أيضًا أكبر ميزة لـ HTTP: إمكانية برمجة الخادم. في حالة PUT، يتعامل الخادم مع الطلب نفسه: لا يوجد مجال لتدخل تطبيقات CGI أو ASP. الطريقة الوحيدة لتطبيقك لالتقاط عمليات PUT هي العمل على مستوى منخفض، وهو طبقة تصفية ISAPI. ولأسباب مماثلة، فإن تطبيق PUT محدود للغاية.
يسمح WebDAV بالمصادقة الموزعة وترجمة محتوى الويب. يقدم العديد من أفعال HTTP الجديدة التي تسمح بتحميل محتوى الويب وقفله/فتحه وإيداعه/التحقق منه عبر HTTP. يتم تنفيذ "الحفظ على الويب" في Office 2000 من خلال WebDAV. إذا كان كل ما يهمك هو تحميل المحتوى، فإن WebDAV يعمل بشكل رائع ويحل الكثير من المشكلات. ومع ذلك، إذا كنت بحاجة إلى تحميل الملفات داخل تطبيق الويب الخاص بك، فلن يكون WebDAV مفيدًا لك. مثل HTTP PUT، يتم تفسير أفعال WebDAV هذه بواسطة الخادم، وليس تطبيق الويب. تحتاج إلى العمل على طبقة تصفية ISAPI للوصول إلى أفعال WebDAV هذه وتفسير المحتوى الموجود في التطبيق الخاص بك.
تم استخدام RFC1867 ( http://www.ietf.org/rfc/rfc1867.txt ) كمعيار مقترح قبل أن يتم قبوله أخيرًا بواسطة W3C في HTML3.2. إنها فكرة بسيطة جدًا ولكنها قوية: تحديد نوع جديد في حقل النموذج.
<INPUT TYPE="FILE">
وأضف أنظمة ترميز مختلفة إلى النموذج نفسه، بدلاً من استخدام النموذج النموذجي:
<FORM ACTION="formproc.asp" METHOD="POST">
ولكن باستخدام:
<FORM ACTION="formproc .asp " METHOD="POST" ENCTYPE="multipart/form-data">
يعد نظام التشفير هذا أكثر كفاءة من نظام تشفير النموذج الافتراضي "application/x-url-encoded" عند نقل كميات كبيرة من البيانات. وهو أعلى من ذلك بكثير. يحتوي ترميز URL على مجموعة أحرف محدودة جدًا فقط، وأي أحرف تتجاوز مجموعة الأحرف يجب استبدالها بـ '%nn'، حيث يمثل nn الرقمين السداسيين العشريين المقابلين. على سبيل المثال، حتى أحرف المسافات العادية يجب استبدالها بـ '%20'. من ناحية أخرى، يستخدم RFC1867 ترميز MIME متعدد الأجزاء، كما هو شائع في رسائل البريد الإلكتروني، لنقل كميات كبيرة من البيانات دون تشفير، ولكن مع عدد قليل فقط من الرؤوس البسيطة ولكن المفيدة المحيطة بالبيانات. اعتمدت الشركات المصنعة للمتصفحات الكبرى زر "تصفح..." الموصى به، ويمكن للمستخدمين بسهولة استخدام مربع الحوار المحلي "فتح ملف..." لتحديد الملفات المراد تحميلها.
لا يزال RFC1867 يترك معظم الطرق المرنة لتحميل الملفات إلى تطبيق الويب الخاص بك. PUT له استخدام محدود للغاية. يعد WebDAV مفيدًا لمؤلفي المحتوى، مثل مستخدمي FrontPage، ولكنه أقل فائدة لمطوري الويب الذين يرغبون في دمج تحميلات الملفات في تطبيقات الويب الخاصة بهم. ولذلك، RFC1867 هو أفضل وسيلة لتضمين تحميل الملفات في تطبيقات الويب.
في التطبيقات العملية، توفر Microsoft Posting Acceptor مجانًا. لا يفهم ASP نظام الترميز "متعدد الأجزاء/بيانات النموذج". بدلاً من ذلك، توفر Microsoft Posting Acceptor، وهو تطبيق ISAPI الذي يقبل إعادة النشر إلى صفحة ASP بعد اكتمال التحميل.
كان SA-FileUp من شركة Software Artisans أحد مكونات Active Server التجارية الأولى. وبعد عدة تحسينات، أصبح الآن موجودًا كمكون خالص لـ ASP.
اثنين.
المبدأ الأساسيلتحليل مبدأ تنفيذ تحميل الملفات المستند إلى ASP
هو: استخدام أسلوب BinaryRead لكائن ADO Stream لقراءة كافة البيانات الموجودة في النموذج، واعتراض بيانات الملف المطلوبة، وحفظها كملف ثنائي.
فيما يلي مثال لصفحة تحميل ملف (upload.htm):
<html>
<الجسم>
<اسم النموذج = "تحميل" طريقة = "نشر" Enctype = "متعدد الأجزاء/بيانات النموذج" الإجراء = "Upload.asp">
<نوع الإدخال = "ملف" اسم = "اسم الملف">
<INPUT TYPE="إرسال" VALUE="تحميل"></TD>
</النموذج>
</الجسم>
</html>
يتم استخدام كائن الملف في البرنامج، بحيث تكون البيانات الأصلية المقروءة باستخدام طريقة BinaryRead في Upload.asp ليست فقط بيانات الملف المحدد نفسه، ولكنها تتضمن أيضًا مسار الملف ونوعه وإرساله على القرص الصلب الخاص بالمستخدم، وصف اسم مجال النموذج والمعلومات الأخرى ذات الصلة بالصفحة، لذلك نحتاج إلى استخراج المحتوى المحدد للملف. وفقًا للتحليل، فإن الخط الفاصل بين معلومات الرأس والبيانات هو عبارة عن زوجين من أحرف الإرجاع وخلاصات الأسطر، وهناك أيضًا معلومات فصل في النهاية، ويمكننا الحصول على بيانات الملف باستخدام طريقة مشابهة لما يلي.
Dim FormData.FormSize,DataStart,CLStr,DivStr
FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)
CLStr=ChrB(13)&ChrB(10)
DataStart=InStrB(FormData.CLStr&CLStr)+4
'4 هو طول زوجين من أحرف إرجاع السطر وتغذية الأسطر
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
FormData هو محتوى الملف.
يمكن إجراء المعالجة المقابلة حسب الحاجة. آخر ما عليك فعله هو حفظ الملف. هناك طريقتان للحفظ: الأولى هي استخدام طريقة تشغيل الملف الثنائي في برامج مثل VB أو VC، وإضافة مكتبة النوع المناسبة إلى المشروع، وتجميعها أخيرًا في ملف DLL، ثم تسجيل ملف DLL عند الاستخدام هو - هي. . إجراء تخزين الملف كما يلي:
الوظيفة العامة SaveFile (اسم المسار كسلسلة) كسلسلة
خافت objContext كـ ObjectContext
خافت objRequest حسب الطلب
تعيين objContext=GetObjectContext()
تعيين objRequest=objContext("الطلب")
'يرتبط الجزء التالي من التعليمات البرمجية بعمليات تخزين الملفات Dim FormData() As Byte وCLStr وDivStr
خافت DataStart طويل، حجم البيانات طويل
DataSize=objRequest.TotalBytes
استرداد بيانات النموذج (حجم البيانات-1)
FormData=objRequest.BinaryRead(DataSize)
CLStr=ChrB(13) & ChrB(10)
DataStart=InStrB(FormData,CLStr & CLStr)+4
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
"قم بإنشاء ملف ثنائي واكتب FormData فيه، افتح Pathname For Binary As 1
ضع رقم 1،،FormData
إغلاق رقم 1
حفظ الملف = "موافق!"
لوظيفة النهاية
هي استخدام أسلوب تشغيل الملف الثنائي المتوفر في ADO STREAM عبارة حفظ الملف هي: StreamOBJ.SaveToFile (fileName,2). في هذا النوع من العمليات، يمكننا تخزين العمليات ذات الصلة في ملف فئة، وعند تطبيقها، ما عليك سوى تضمين ملف الفئة مباشرة في برنامج ASP. للتعرف على طرق المعالجة المحددة، يرجى الرجوع إلى المقدمة ذات الصلة.
ثلاثة.
يمكنلمثيل طريقة تنفيذ تحميل الملف
استخدام طريقة مكون أو بدون مكون لتنفيذ تحميل الملف. بالنسبة لفئات المكونات، على سبيل المثال، يعد Microsoft Posting Acceptor (MPA للاختصار) مكون خادم مجاني تم إصداره بواسطة Microsoft، كما يعد تثبيت هذا النوع من المكونات مناسبًا نسبيًا. بالنسبة لـ mpa الخاص بشركة Microsoft، ما عليك سوى تشغيل ملف التثبيت الخاص به. بالنسبة لمكونات dll العامة، نحتاج إلى تسجيلها. على سبيل المثال، لاستخدام aspcnUP.dll، تحتاج فقط إلى تنفيذ regsvr32 [path]aspcnUP.dll على Window 2000، وسيطالبك النظام برسالة تسجيل ناجحة ويمكنك استخدام المكون للفئات الأقل مكونًا؛ مثل فئة تحميل المكونات www.5xsoft.com -upload_5xsoft. عند استخدامه، ما عليك سوى تضمين العبارة التالية في المعالج:
<!--#include FILE="upload.inc"-->
للتعرف على الخصائص وطرق التشغيل المتعلقة
بإنشاء كائن تحميل
، يرجى الرجوع إلى دليل المستخدم الخاص بهذا المكون.فيما يلي الكود المصدري لتحميل بعض أنواع الملفات (upload.asp)، مع أخذ مكون aspcnUP.dll كمثال:
<% @ language="vbscript"
تعيين fileUP=Server.CreateObject("aspcn.Upload")
fileUP.Maxsize=200000
fileUP.Path = "d:upfile"
fileUP.Upload
بالنسبة إلى i=0 إلى fileUP.Count
اسم الحقل=fileUP.FieldName(i)
إذا كان fileUP.FileType (fieldname) = "zip" أو ileUP.FileType (fieldname) = "rar" ثم
fileUP.حفظ اسم الحقل
نهاية إذا
التالي
تعيين fileUP=لا شيء
%>
أربعة. الاستنتاج
لا يزال نموذج تطبيق المتصفح/الخادم يتطور بسرعة في ASP الذي أطلقته Microsoft مؤخرًا. NET لديه وظيفة تحميل الملفات المضمنة، وهي بسيطة للغاية ومريحة للاستخدام. كتقنية جديدة تمامًا، ASP. NET ليس مجرد ترقية بسيطة لـ ASP، بل هو إطار عمل جديد تمامًا لتطوير الويب يحتوي على العديد من الميزات الجديدة. آسيا والمحيط الهادئ. NET تعليمات برمجية أسهل في الكتابة ولها بنية أكثر وضوحًا. باستخدام هذه الرموز، سنعيد استخدامها ومشاركتها بسهولة أكبر، وبالتالي تطوير المزيد والمزيد من البرامج العملية.