يعد إنشاء الملفات من المتصفح طريقة بسيطة لتمرير الملفات من العملاء إلى الخادم. من المتصفح الثالث -NetScape و Microsoft ، يمكن لمعظم المتصفحات تحميل الملفات من الخادم دون الحاجة إلى تزويد المستخدمين بطرق أو برنامج وصول خاص.
تم تصميم بعض مكونات ASP للملفات ، على سبيل المثال ::
نشر متقبل
(جزء من Microsoft SiteServer) ،
aspsmartupload (Advantys) ،
aspupload (يستمر software) ،
SA-FileupSoftware Artisants)
ستخبرك بداية هذه المقالة معلومات حول إنشاء مثل هذه المكونات ، وعادة ما تستخدم هذه المكونات VB أو C ++ أو Java.
مشكلة هذه المكونات هي أنها جزء من المنتجات الثالثة بدلاً من ASP القياسية. كمكون ثالث -يجب تثبيت التثبيت على الخادم. هذا يعني أنه يجب نسخ DLL وتسجيله على الخادم. لا يُسمح لمعظم أنظمة الاستضافة بأداء مثل هذه الإعدادات على خوادمها لأن مشاكل التكوين (وخاصة المضيفين الظاهريين) قد تحدث. العيب الثاني هو أن معظمهم ليسوا مجانيين.
لذلك ، أحتاج إلى كتابة رمز VBScript لحل مشكلة تحميل الملف. هذا ليس خيارًا لا مفر منه ، لأن VBScript هي لغة نصية ، والتي يمكن أن تستخدم فقط نوع بيانات المتغيرات ، ولا يمكنها توفير العديد من وظائف إدارة البيانات الثنائية ومصفوفة البايت.
لفهم عملية التحميل ، يجب أن نعرف أولاً أن البيانات يتم إرسالها من المتصفح إلى الخادم باستخدام بروتوكول HTTP. هذا يعني أنه يتم تقديم نموذج تقديم "multipart/form-data" (متعدد الأجزاء/التنسيق).
نموذج التحميل
في ظل الظروف العادية ، استخدم نموذج HTML لتمرير البيانات من المتصفح إلى الخادم. قد يحتوي هذا النموذج على مجالات نصية ، وصناديق التفتيش ، والأزرار ، والتحكم في نوع الملف للملفات التي تم تحميلها. يملأ المستخدم ويقدم هذا الجدول إلى الخادم ببياناته الخاصة.
تحدد سمة enableype في عنصر الجدول نوع المحتوى المشفر بواسطة مجموعة بيانات الجدول المشفرة على الخادم. القيمة الافتراضية لسمة enctype هي "Application/X-WWW-Form-urlencoded" ، ولكن عند إرسال كمية كبيرة من النص إلى الخادم ، بما في ذلك البيانات ذات الأحرف غير ASCII أو الأرقام الثنائية ، لا يمكن أن يكون هذا النوع الافتراضي مؤهلاً. في هذا الوقت ، يجب استخدام نوع محتوى "multipart/form-data" عند تحميل الملف النموذج.
تحتوي معلومات "multipart/form-data" على سلسلة من المكونات.
رأس تحديد المحتوى ، قيمة "data form" ؛
للتحكم في نوع الملف ، قد يحتوي جزء واحد على مزيد من المعلومات:
اسم الملف (اسم الملف) لسمات المسار الأصلي واسم الملف على العميل ؛
اتبع عنصر التحكم الثنائي أو المحتوى النصي وراء هذه الرؤوس.
يوضح المثال التالي ترميز "multipart/form-data".
إذا تم إرسال هذا النموذج ، يمكنك قراءة هذه الطلبات على الخادم:
----------------------------- 7CF87224D2020A
تحديد المحتوى: الاسم النموذج ؛
[البريد الإلكتروني محمي]
----------------------------- 7CF87224D2020A
Disposition: form-data ؛
نوع المحتوى: Image/PJPEG
----------------------------- 7CF87224D2020A
تحديد المحتوى: name data ؛
إرسال الاستعلام
----------------------------- 7CF87224D2020A--
عندما يتم إرسال هذا المحتوى كاستجابة للعميل ، سيتم عرضه. طلب.
< / في المئة
Response.BinaryWrite (request.binaryRead (request.totalbytes))
٪>
يمكنك رؤية تقسيم كل جزء من الاستجابة:
----------------------------- 7CF87224D2020A
يتبع خط الحدود الأخير " -".
كل عنصر تحكم لديه تبديد المحتوى. يتم التحكم في التعرف على سمة الاسم بواسطة جدول HTML (البريد الإلكتروني ، blob ، وإدخال. للتحكم في نوع الملف (blob) ،
اسم الملف هو أيضًا جزء من رأس التصميم الرئيسي ، ويعطي رأس نوع المحتوى نوع المحتوى للبيانات الثنائية.
نص تم تحميله
يجب ربط جميع المحتويات المذكورة أعلاه. هذا واضح للغاية في VB أو C ++ لأن هناك العديد من الكائنات والطرق لهذا الغرض. في VBScript ، يجب استخدام بعض الوظائف التي توفرها اللغة ، ويجب حل مشكلة السلسلة المتغيرة المشفرة المزدوجة المستخدمة في VBScript.
وظيفة vbscript
البيانات الأصلية هي تنسيق ثنائي ، لذلك يجب استخدام وظيفة VBScript المصممة لإدارة البيانات الثنائية. لأننا نعتبر البيانات الأصلية كسلاسل من وظائف البايت ، MIDB ، Instrb ، و LENB مفيدة. لكن تجنب السلسلة الكلاسيكية لـ VBScript ، لأنها سلسلة مزدوجة -بايت مشفرة ، والتي ليست مناسبة للتحلل إلى بايت واحد.
هذه هي الوظائف الوحيدة المستخدمة لتحلل البايتات في وظيفة VBScript. مطلوب أيضًا طريقة للحصول على سلسلة مشفرة مزدوجة من البيانات المتحللة بحيث يمكنك استخدام السلسلة في ترميز VBScript. من أجل استخدام السلسلة كمتغير مستقل في Instrb ، هناك حاجة إلى وظيفة لتحويل السلسلة المزدوجة إلى سلسلة واحدة.
بالنسبة لي ، كتبت وظيفتين ، GetString () و getBytestring () ، ثم شرحتها لاحقًا.
بناء
يتم تخزين البيانات المتحللة في كائن قاموس VBScript. كائن القاموس هو كائن جدول التجزئة ، الذي يخزن (المفتاح ، العنصر). وهو جزء من VBScript و ASP2.0.
حدد كائن القاموس الأول "uploadRequest". يحتوي هذا الكائن على جميع عناصر التحكم المقدمة بواسطة جدول التحميل. المفتاح هو التحكم في عنصر التحكم ، والعنصر هو معلومات التحكم الواردة في الكائن:
"ControlName1" ، Dictionary Control1
"ControlName2" ، Dictionary Control2
يحتوي تمثيل كائن القاموس المتحكم فيه على زوج (المفتاح ، العنصر) التالي:
"القيمة" أو السلسلة أو المحتوى الثنائي
"اسم الملف" ، اسم الملف الذي تم تحميله
"contentType" ، contentType من ملف تم تحميله
الجمع بين هذه ، هناك الأمثلة التالية:
UploadRequest: "البريد الإلكتروني" ، UploadControl 1: "Value" ، [البريد الإلكتروني المحمي]
"Blob" ، UploadControl 2: "Filename" ، C: /Upload/200902/file.gif "contentType":
صورة/GIF "قيمة": GIF89AI؟
هذا الكائن مفيد للغاية للوصول إلى البيانات في المستقبل واستخدام البيانات.
انفصال
فيما يلي رمز التحلل والقراءة والتحكم في التحميل. تم الانتهاء من هذه العملية مع برنامج "BuilduploadRequest".
Sub BuilduploadRequest (requestbin)
بادئ ذي بدء ، يجب أن تجد الخط الفاصل.
احصل على الحدود posbeg = 1 posend = instrb
بو
|||