مقدمة
عند تنزيل الملفات باستخدام HTTP ، تحتاج فقط إلى تعيين رأس الاستجابة ذي الصلة على الخادم واستخدام Binary لنقل بيانات الملف ، وسيتلقى العميل (المتصفح) بيانات الملف بناءً على رأس الاستجابة. في node.js ، بعد تعيين رأس الاستجابة ، اقرأ دفق الملف ، ثم نقل الدفق إلى Response كائن الاستجابة باستخدام طريقة “.pipe()” ، يمكنك تنفيذ خادم تنزيل ملف بسيط.
1. تنزيل الملف مقدمة
يقوم HTTP بتنفيذ تفاعل الحالة بناءً على رأس الطلب ورأس الاستجابة. بعد الحصول على حالة الاستجابة الصحيحة للخادم ، سيقوم العميل أولاً بتحليل رأس الاستجابة ويتلقى وعرض البيانات (هيئة الاستجابة) بناءً على رأس الاستجابة. لتنزيل الملف ، فإن عملية التنفيذ هي كما يلي:
1. يبدأ العميل طلب مورد الملفات
2. يبحث الخادم عن الملف المقابل ويعين رؤوس الاستجابة مثل " Content-Type " و " Content-Disposition " لتمثيل نوع "MIME" ووصف الملف للملف على التوالي.
3. العميل يخفف ويستقبل بيانات الملف بناءً على رأس الاستجابة الذي تم إرجاعه بواسطة الخادم.
رأس الاستجابة الذي يجب تعيينه
عند إعداد رؤوس استجابة تنزيل الملف ، بالإضافة إلى رؤوس استجابة HTTP شائعة الاستخدام ، من المهم تعيين رؤوس الاستجابة التالية:
نوع المحتوى: التطبيق/Octet-StreamContent-Disposition: مرفق ؛ اسم الملف = myfilename.ext
في الإعدادات المذكورة أعلاه ، يخبر " Content-Type: application/octet-stream " المتصفح أن هذا ملف ثنائي ، ويخبر " Content-Disposition " المتصفح أن هذا مرفق يحتاج إلى تنزيله ويخبر المستعرض اسم الملف الافتراضي. إذا لم تتم إضافة رأس استجابة " Content-Disposition " ، فيجوز للمتصفح تنزيل محتوى الملف أو عرضه ، ويختلف معالجة المتصفحات المختلفة.
2. node.js تنزيل ملف تنزيل خادم
بعد ذلك ، نقوم بتنفيذ خادم تنزيل ملفات بسيط استنادًا إلى إطار عمل Express ، والذي يتضمن بشكل أساسي وظيفتين: ملفات الخادم التصفح وتنزيل الملفات .
2.1 إضافة مسار
بعد إنشاء تطبيق Express ، أضف الطريقان التاليان:
Router.get ('/files' ، function (req ، res ، next) {// show server file}) ؛ Router.get ('/file/: filename' ، function (req ، res ، next) {// تنفيذ تنزيل الملف}) ؛يتم استخدام المسارين المضافة أعلاه: عرض ملفات الخادم وتنزيل تنزيلات الملفات .
2.2 عرض ملفات الخادم
لإدراك عرض ملفات الخادم ، يجب عليك قراءة دليل الملفات من خلال وحدة " fs " وتنفيذ عمليات فحص الملف/الدليل ، وما إلى ذلك. تحتاج أيضًا إلى استخدام وحدة " المسار " لمعالجة مسار الملف. أولاً ، يتم تقديم هاتين الوحدات النمطتين:
const fs = require ('fs') ؛ const path = requist ('path') ؛رمز التنفيذ لعرض ملف الخادم هو كما يلي:
router.get ('/files' ، function (req ، res ، next) {// show file server file // file directory var filepath = path.join (__ dirname ، './') ؛ if (fs.statsync (path.join (filepath ،). isfile ()) {files.push (file) ؛ في الكود أعلاه ، بعد قراءة الدليل ، يتم عرض قائمة الملفات القابلة للتنزيل من خلال ملف العرض " files.ejs ". الرمز كما يلي:
<! doctype html> <html> <head> <title> قم بتنزيل اختيار الملف </title> </head> <body> <h1> الرجاء تحديد ملف التنزيل: </h1> <٪ if (files.length> 0) {٪> <ul> <ul> <٪ files. ٪> </a> </li> <٪}) ٪> </ul> <٪} آخر {٪> <p> لا توجد ملفات قابلة للتنزيل ... </p> <٪} ٪> </body> </html>2.3 تنفيذ تنزيل الملف
عند تنزيل ملف ، يمكنك أولاً قراءة الملف في " Buffer " ، ثم إرسال بيانات الملف من خلال طرق " res.send()” أو " res.end()” ، أو يمكنك إرسال بيانات الملف بناءً على الدفق (" Stream "). عند استخدام " Stream " لتنزيل تنزيل الملف ، يمكنك استخدام طريقة " fs.createReadStream()” لإنشاء دفق قابل للقراءة ، Response كائن الاستجابة هي دفق قابل للكتابة. وبهذه الطريقة ، تحتاج فقط إلى نقل دفق الملف إلى دفق استجابة Response من خلال طريقة ”.pipe()” .
رمز تطبيق تنزيل الملف كما يلي:
Router.get ('/file/: filename' ، function (req ، res ، next) {// تنفيذ ملف تنزيل var filename = req.params.filename ؛ var filepath = path.join (__ dirname ، filename) ؛ var stats = fs.statsync (filepath) ؛ if (stats.isfile () {res.set. "تطبيق/Octet-the" ، "مرفق".لخص
ما سبق هو كل محتوى استخدام Node.js لتحقيق تنزيلات ملف HTTP. آمل أن يكون من المفيد للجميع أن يتعلموا node.js.