< إجراء النموذج = طريقة التحميل.asp = نوع النشر = بيانات متعددة الأجزاء / النموذج >
تحميل الملف:<نوع الإدخال=اسم الملف=ملف1><br>
<نوع الإدخال=اسم الإرسال=قيمة التحميل=تحميل>
</النموذج>
من بينها، يتم استخدام معلمة enctype لتعيين طريقة تشفير MIME للنموذج. عند تحميل ملف (أو يحتوي على مربع نص في نفس الوقت)، يجب تعيين سمته على بيانات متعددة الأجزاء/نموذج.asp سيتم تقديم الملف الثنائي المستلم من جانب الخادم لبرنامج ASP لمعالجة الدفق لاحقًا في هذه المقالة.
2. تحميل تحليل تنسيق الملف
قبل معالجة الملف، يجب علينا أولاً فهم التنسيق المحدد للملف الذي تم تحميله، ويمكننا عرض الكود الثنائي الخاص به عن طريق كتابة برنامج ASP البسيط التالي:
<%
PNG=Request.TotalBytes 'احصل على حجم الملف الذي تم تحميله
filedata=Request.BinaryRead(filesize) 'احصل على البيانات الثنائية للملف الذي تم تحميله
Response.BinaryWrite filedata 'عرض البيانات الثنائية على المتصفح
%>
وبتحليل الكود الثنائي للملف الذي تم تحميله والمعروض على المتصفح، وجدنا أن الكود يتكون من أربعة أجزاء (إذا تم تحميل عدة ملفات أو مربعات نصية في نفس الوقت، يتم ترتيب الأكواد حسب ترتيب التحميل، وبنفس التنسيق) )، ويتم إدخال محتوى كل جزء بحرف إرجاع مفصولاً بأحرف السطر الجديد:
1) الجزء الأول (علم البداية)
--------------------------7d329631b04d4
2) الجزء الثاني (وصف الوثيقة)
ترتيب المحتوى: اسم بيانات النموذج = اسم الملف = C:/Documents and Settings/Administrator/My Documents/Invitation.doc نوع المحتوى: application/msword
هنا، يمكننا الحصول على اسم الملف والمسار المطلق للملف الذي تم تحميله، بالإضافة إلى نوع الملف. هذه المعلومات ضرورية لحفظ الملف بشكل صحيح.
3) الجزء 3 (محتويات الوثيقة)
وهذا يعني أنه تم حذف المحتوى الثنائي للملف.
4) الجزء 4 (علامة النهاية)
--------------------------7d329631b04d4
دمج محتويات الجزأين الأول والرابع، --------------------------------------------7d329631b04d4 (تختلف القيمة في كل مرة يتم تحميلها) ) Same) بمثابة فاصل، يحدد بداية ونهاية جزء من البيانات (عندما يكون هناك محتويات متعددة تم تحميلها). فيما يتعلق بالمعلومات اللازمة لحفظ الملف، نحتاج أولاً إلى الحصول على اسم الملف من اسم ملف الجزء الثاني من البيانات، ثم نحتاج إلى تحديد موضع البداية للملف بشكل صحيح، وأخيرًا استخدام تقنية ASP للحفظ الملف الثنائي باسم الملف الأصلي. إذا تم تحميل محتويات متعددة (مثل مربعات النص والملفات المتعددة) في نفس الوقت، فسيتم معالجتها بنفس الطريقة. يتم تضمين كل جزء من المحتوى في المحدد، ولكن يتم التعبير عن مربعات النص والملفات بطرق مختلفة قليلاً يمكن القيام بذلك عن طريق تحليل الكود الثنائي الخاص به على وجه التحديد لفهمه.
3. استخدم تقنية ASP لتنفيذ تخزين الملفات
معالجة كود الملف الذي تم تحميله
1) الحصول على رمز الفاصل
من التحليل أعلاه، نعلم بالفعل أن الفواصل تلعب دورًا مهمًا في تقسيم أجزاء بيانات متعددة (بما في ذلك مربعات النص وأنواع مختلفة من الملفات). كما تم تحليله من قبل، يظهر الفاصل قبل أول حرف إرجاع ورمز تغذية السطر. ولذلك يمكن الحصول على رمز المحدد من خلال البرنامج التالي:
<%
newline=chrB(13) & chrB(10) 'يمثل السطر الجديد حرف الإرجاع الثنائي
حجم الملف = Request.TotalBytes 'حجم الملف هو حجم الملف الذي تم تحميله
filedata=Request.BinaryRead(filesize) 'filedata هي البيانات الثنائية للملف الذي تم تحميله
Divider=leftB(filedata,clng(instrb(filedata,newline))-1) 'المقسم هو المقسم
%>
ملحوظة: نظرًا لأننا نتعامل مع الرمز الثانوي الثنائي هنا، فإن جميع الوظائف تستخدم نسختها الثنائية، مع إضافة b.
2) احصل على محتوى الملف (أو مربع النص).
(1) الوظيفة التحضيرية (تحويل السلسلة الثنائية إلى سلسلة)
لا يحتاج محتوى الملف الذي تم تحميله إلى المرور عبر عملية التحويل من ثنائي إلى سلسلة، ويمكن حفظه مباشرة. ومع ذلك، إذا كنت بحاجة إلى استخراج محتويات مربع النص أو اسم الملف، فيجب عليك إجراء التحويل. لذلك، من الضروري كتابة دالة تحويل عالمية مناسبة للأحرف الصينية. وفيما يلي رمز الوظيفة:
الدالة BtoS (bstr)
إذا لم يكن فارغًا (bstr) إذن
لأني = 0 إلى lenb(bstr) - 1
bchr = midb(bstr,i+1,1)
إذا كان ascb(bchr)>127 فإن "الأحرف الصينية عبارة عن بايتات مزدوجة، لذا يجب معالجة حرفين معًا"
درجة الحرارة = درجة الحرارة&مركز حقوق الإنسان(ascw(midb(bstr, i+2, 1)&bchr))
ط = ط+1
آخر
درجة الحرارة = درجة الحرارة & مركز حقوق الإنسان (ASCB (BCHR))
نهاية إذا
التالي
نهاية إذا
BtoS=درجة الحرارة
وظيفة النهاية
(2) الحصول على محتوى الملف (أو مربع النص)
في تطبيقات الويب الفعلية، قد تتضمن عملية التحميل محتويات متعددة، مثل مربعات النص المتعددة والملفات المتعددة وما إلى ذلك. يتم تمييز الملفات ومربعات النص بسهولة. تحتوي بيانات الملف على سلسلة اسم الملف. لذلك، قمنا بكتابة الوظيفة العامة التالية، والتي يمكن استخدامها لاستخراج محتوى الملف ومحتوى مربع النص (يلزم التحويل الثنائي):
الدالة getdata(byval data, byval Divider, Final) تمثل البيانات السلسلة الثنائية؛ ويمثل الفاصل النهائي الموضع النهائي للبيانات
filename=chrb(102)&chrb(105)&chrb(108)&chrb(101)&chrb(110)&chrb(97)&chrb(109)&chrb(101)&chrb(61)&chrb(34) 'التمثيل الثنائي لسلسلة اسم الملف=
bncrlf=chrb(13)&chrb(10) 'حرف إرجاع ثنائي
startpos = instrb(data,divider)+lenb(divider)+lenb(bncrlf) 'موضع البداية
endpos = instrb(startpos,data, Divider)-lenb(bncrlf) 'موضع النهاية
Part1 = midb(data, startpos, endpos-startpos) 'المحتوى بين فاصلين
firstline = midb(part1, 1, instrb(part1, bncrlf)-1) ' فقرة الوصف قبل المحتوى
إذا كان (instrb(firstline,filename)=0) ثم "إذا كان مربع نص، فاحصل على محتوى سلسلة مربع النص"
stemp=midb(part1,instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf),lenb(part1)-instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
getdata=BtoS(stemp)
آخر "إذا كان ملفًا، فاحصل على المحتوى الثنائي للملف
Getdata=midb (part1، instrb (part1، bncrlf&bncrlf)+lenb (bncrlf&bncrlf)، lenb (part1)
-instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
نهاية إذا
Final=endpos
وظيفة النهاية
يمكنك الحصول على محتوى الملف (أو مربع النص) المطلوب عن طريق استدعاء هذه الوظيفة مباشرة في البرنامج، كما هو موضح أدناه:
<%
المحتوى = getdata (البيانات، المقسم، الموضع)
%>
3) الحصول على اسم الملف
كما تم تحليله من قبل، يحتوي الحقل filename= الخاص بتدفق بيانات ملف التحميل على اسم الملف ومساره المطلق. بشكل عام، نحتاج فقط إلى استخراج اسم الملف الموجود في المسار، وفيما يلي رمز البرنامج:
<%
namepos=instrrev(B2S(firstline),chr(92)) 'الخط الأول هو بيانات جزء الوصف التي تم الحصول عليها أعلاه، chr(92)
يعبر/
filename=midb(firstline,namepos+1,lenb(firstline)-namepos-1) 'احصل على اسم الملف
%>
استخدم ASP لتنفيذ وظيفة تحميل الملفات مباشرة
يمكن لمبرمجي ASP التقليديين فقط استخدام كائن FILESYSTEMOBJECT لنقل الملفات النصية ونسخها وحذفها والعمليات الأخرى عليها (.txt). إذا كانوا بحاجة إلى معالجة الكائنات الثنائية، فيجب عليهم استخدام الأساليب التي تم تقديمها مسبقًا في هذه المقالة. ومع ذلك، الآن يمكن لكائن ADO.STREAM في ASP تشغيل الكائنات النصية والكائنات الثنائية في نفس الوقت (يمكن تنزيله من http://www.microsoft.com/data)، ويمكنك استخدامه لتنفيذ تحميل الملف مباشرة وظيفة في ASP. أدناه، نقدم عملية التنفيذ.
1) افتح كائن الدفق
بالنسبة لكائنات SREAM، إذا كنت تريد حفظ الملف، فيجب عليك حفظ محتويات الكائن بالكامل. لذلك، يجب علينا إنشاء كائنين (أو أكثر) من كائنات STREAM، أحدهما هو دفق البيانات المصدر، الذي يتلقى البيانات الثنائية الأولية؛ والآخر هو دفق البيانات الوجهة، الذي يتلقى البيانات المعالجة من دفق البيانات المصدر، وأخيرًا حفظ إلى الملف المطلوب.
<%
قم بتعيين str=server.CreateObject(ADODB.Stream) 'str هو دفق البيانات المصدر
str.Mode=3 'اضبط الوضع المفتوح، 3 قابل للقراءة والكتابة
str.Type=1 'اضبط نوع البيانات، 1 هو بيانات ثنائية
فتح
تعيين desc=server.CreateObject(ADODB.Stream) 'desc هو دفق البيانات الهدف
تنازلي.الوضع=3
وصف النوع = 1
وصف.فتح
%>
2) نسخ المحتوى بين كائنات STEAM
في هذا الجزء، يجب عليك تحديد موقع بداية الملف في دفق البيانات المصدر والعثور على طول محتوى الملف قبل أن تتمكن من نسخ الملف بشكل صحيح إلى دفق البيانات الوجهة وحفظ الملف. رمز البرنامج كما يلي:
<%
formdata=Request.BinaryRead(Request.TotalBytes) 'بيانات النموذج هي كل المحتوى الذي تم تحميله
str.Write formdata ' دفق بيانات مصدر المهمة
str.position=count-lenb(result)-2 'يشير الموضع إلى بداية الملف
يمثل str.copyto desc، lenb(filecotent) 'lenb(filecontent) طول الملف
desc.SaveToFile fullpath,2 'احفظ الملف بالمسار والاسم المحدد بواسطة المسار الكامل
%>
3) أغلق كائن STEAM
بمجرد اكتمال البرمجة، يجب إغلاق كائن STEAM وتحريره على النحو التالي:
<%
إغلاق
تعيين تنازلي = لا شيء
إغلاق
تعيين STR = لا شيء
%>
تلخيص
توفر هذه المقالة طريقة لتنفيذ تحميل الملفات مباشرة باستخدام ASP، والتي تم تطبيقها بشكل جيد في نظام إدارة المعلومات الذي طورته هذه الوحدة. لقد أثبتت الممارسة أن هذه الطريقة أبسط وأكثر كفاءة من العديد من طرق تحميل الملفات التقليدية.