يعد استخدام تقنية WEB لتنفيذ نظام إدارة بهيكل B/S (المتصفح/الخادم) هو اتجاه تطوير أتمتة المكاتب. لقد تطورت أنظمة الإدارة القائمة على تكنولوجيا الويب بسرعة في السنوات الأخيرة لأنها تتمتع بدورة تطوير قصيرة؛ كما أنها مستقلة عن منصات المستخدم؛ كما أنها سهلة التنفيذ للتطبيقات التفاعلية ويمكنها جمع المعلومات ومعالجتها ونشرها بسرعة وكفاءة. أصبحت تقنية ASP تدريجيًا الأداة المفضلة لتطوير أنظمة الإدارة نظرًا لكفاءتها التطويرية العالية وتفاعلها الجيد وأمانها القوي.
تتضمن العديد من التطبيقات المستندة إلى الويب عمليات تحميل الملفات. تتضمن تقنيات تحميل الملفات الشائعة ما يلي: استنادًا إلى بروتوكول HTTP؛ استنادًا إلى مكونات تحميل الملفات التي تم تطويرها بواسطة VB (أو DELPHI ولغات البرمجة الأخرى)؛ تتطلب هذه الأساليب بشكل عام من المبرمجين إتقان تكنولوجيا الويب أو تكنولوجيا قواعد البيانات أو تكنولوجيا CGI أو تكنولوجيا المكونات في نفس الوقت، ولها متطلبات أعلى للمبرمجين. إن استخدام تقنية ASP للتنفيذ المباشر لوظيفة تحميل الملفات التي ستقدمها هذه المقالة يتطلب فقط من المبرمجين إتقان تقنية ASP واحدة، مما يقلل بشكل كبير من صعوبة البرمجة.
مقارنة بين العديد من تقنيات تحميل الملفات
1. بناءً على بروتوكول HTTP،
تتطلب هذه الطريقة من المبرمجين استخدام برامج طرف ثالث، مثل DELPHI وVB وما إلى ذلك، لتنفيذ برمجة بروتوكول HTTP أولاً في التطبيق، ثم حزم محتوى الملف. ليتم تحميله بتنسيق بروتوكول HTTP، وأخيرًا يرسل رسالة طلب تحميل إلى خادم الويب لتحقيق تحميل الملف. نظرًا لأن DELPHI وVB لا يستطيعان كتابة برامج شبكة ويب كاملة ويمكنهما فقط كتابة تطبيقات ويب صغيرة، فإن هذه الطريقة تُستخدم فقط لتطبيقات الشبكة ذات الوظائف المحدودة.
2. تم تطوير مكون تحميل الملفات استنادًا إلى لغة VB (أو DELPHI، وما إلى ذلك).
تستخدم هذه الطريقة لغة VB (أو DELPHI، وما إلى ذلك) لتطوير مكونات خادم ASP لتنفيذ خدمات تحميل ملفات محددة. يستخدم أولاً وظيفة نموذج ASP لتحميل الملفات (تنسيق ثنائي) من العميل إلى الخادم، ثم يستخدم المكونات المطورة بواسطة VB لمعالجة الملفات الثنائية إلى ملفات يمكن قراءتها وكتابتها بشكل طبيعي. تتطلب هذه الطريقة من المبرمجين ليس فقط إتقان لغة ASP، ولكن أيضًا استخدام لغات الطرف الثالث مثل VB لبرمجة المكونات، مما يزيد من صعوبة التطوير.
3.
هذه الطريقة مشابهة للطريقة السابقة المعتمدة على تقنية قواعد البيانات. يكمن الاختلاف في معالجة الملفات الثنائية التي تم تحميلها. ويستخدم قاعدة بيانات لحفظ الملفات الثنائية. توفر كل من قواعد البيانات الصغيرة وقواعد البيانات الكبيرة أنواع بيانات لتخزين البيانات الثنائية، ما عليك سوى تخزين البيانات في الحقول المقابلة في طريقة Append Chunk. على الرغم من أن هذه الطريقة بسيطة وممكنة، نظرًا لاختلاف حجم الملف الذي يتم تحميله في كل مرة، فإنها ستتسبب في إهدار مساحة قاعدة البيانات بشكل كبير وتقليل سرعة الوصول إلى البيانات، ولا يمكن تحميل الملف إلا في بيئة الوصول إلى قاعدة البيانات. تسبب إزعاجا كبيرا.
ومعذلك
، فإن استخدام تقنية ASP لتنفيذ وظيفة تحميل الملفات بشكل مباشر يتطلب فقط من المبرمج إتقان تقنية ASP واحدة، مما
يقلل بشكل كبير من صعوبة البرمجة. وفيما يلي سنقدم كيفية استخدام هذه الطريقة من خلال مثال.
1. نموذج تحميل الملف
تحتاج أولاً إلى كتابة نموذج يمكنه توفير وظيفة تحميل الملف. البرنامج كما يلي:
<Form action="upload.asp"method=post enctype="multipart/form-data">.
تحميل الملف:<نوع الإدخال=اسم الملف=ملف1><br>
<نوع الإدخال = اسم الإرسال = قيمة التحميل = "تحميل">
</form>
من بينها، يتم استخدام معلمة enctype لتعيين طريقة تشفير MIME للنموذج. عند تحميل ملف (أو يحتوي على مربع نص)، يجب تعيين سمته على "تحميل بيانات متعددة الأجزاء/النموذج". asp هو جانب الخادم. سيتم تقديم برنامج ASP الذي يعالج دفق الملفات الثنائية المستلمة لاحقًا في هذه المقالة.
2. تحليل تنسيق الملف
قبل معالجة الملف، يجب علينا أولاً فهم التنسيق المحدد للملف الذي تم تحميله، ويمكننا عرض الكود الثنائي الخاص به عن طريق كتابة برنامج ASP البسيط التالي:
<%.
PNG=Request.TotalBytes 'احصل على حجم الملف الذي تم تحميله
filedata=Request.BinaryRead(filesize) 'احصل على البيانات الثنائية للملف الذي تم تحميله
Response.BinaryWrite filedata 'عرض البيانات الثنائية على المتصفح
%>
قم بتحليل الكود الثنائي للملف الذي تم تحميله والمعروض على المتصفح واكتشف أن الكود يتكون من أربعة أجزاء (إذا تم تحميل عدة ملفات أو مربعات نصية في نفس الوقت، يتم ترتيب الأكواد حسب ترتيب التحميل، بنفس الترتيب) التنسيق)، ويتم فصل محتوى كل جزء عن طريق رموز إرجاع السطر ورموز تغذية السطر:
1) الجزء الأول (علامة البداية)
--------------------------7d329631b04d4
2) الجزء 2 (وصف الملف)
المحتوى
: اسم بيانات النموذج = "file1"؛
، يمكننا الحصول على اسم الملف والمسار المطلق للملف الذي تم تحميله، وكذلك نوع الملف. هذه المعلومات ضرورية لحفظ الملف بشكل صحيح.
3) الجزء الثالث (محتوى الملف)
هو المحتوى الثنائي للملف، محذوف.
4) الجزء 4 (علامة النهاية)
-----------------------------------------7d329631b04d4
دعونا نلقي نظرة على محتويات الجزء 1 والجزء 4، "-- ------------------------------7d329631b04d4" (تختلف القيمة في كل مرة تقوم بتحميلها) تلعب دور الفاصل، فهو يمثل بداية ونهاية جزء من البيانات (عند وجود عمليات تحميل متعددة). فيما يتعلق بالمعلومات اللازمة لحفظ الملف، نحتاج أولاً إلى الحصول على اسم الملف من "اسم الملف" الخاص بالجزء الثاني من البيانات، ثم نحتاج إلى تحديد موضع البداية للملف بشكل صحيح، وأخيراً استخدام تقنية 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))
الحصول على البيانات = 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) تم تحليل الحصول على اسم الملف من قبل. يحتوي حقل "اسم الملف =" الخاص بدفق بيانات الملف الذي تم تحميله على الاسم والمسار المطلق للملف. بشكل عام، نحتاج فقط إلى استخراج اسم الملف الموجود في المسار، وفيما يلي رمز البرنامج:
<%.
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) افتح كائن STREAM
بالنسبة لكائن 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، والتي تم تطبيقها بشكل جيد في نظام إدارة المعلومات الذي طورته هذه الوحدة. لقد أثبتت الممارسة أن هذه الطريقة أبسط وأكثر كفاءة من العديد من طرق تحميل الملفات التقليدية.