Node.js و Express

رفع الملفات والتخزين

16 دقيقة الدرس 19 من 40

مقدمة إلى رفع الملفات

التعامل مع رفع الملفات هو متطلب شائع في تطبيقات الويب. سواء كنت تبني أداة لرفع صور الملف الشخصي، أو نظام إدارة مستندات، أو منصة مشاركة وسائط، فإن فهم كيفية التعامل الآمن والفعال مع رفع الملفات في Node.js أمر ضروري.

اعتبارات رفع الملفات: الأمان (التحقق من أنواع وأحجام الملفات)، موقع التخزين (قرص، ذاكرة، سحابة)، الأداء (البث مقابل التخزين المؤقت)، وتجربة المستخدم (تتبع التقدم، معالجة الأخطاء).

تثبيت Multer

Multer هي وسيطة Node.js للتعامل مع multipart/form-data، تستخدم بشكل أساسي لرفع الملفات:

# تثبيت Multer
npm install multer

# تثبيت حزم إضافية للتخزين السحابي
npm install @aws-sdk/client-s3
npm install @aws-sdk/s3-request-presigner

# تثبيت Sharp لمعالجة الصور
npm install sharp
متى تستخدم تخزين الذاكرة: استخدم تخزين الذاكرة عندما تحتاج إلى معالجة الملفات فوراً (تغيير حجم الصور، تحليل CSV) أو الرفع إلى التخزين السحابي دون الحفظ محلياً. تجنب الملفات الكبيرة لمنع مشاكل الذاكرة.
تحذير أمني: تحقق دائماً من أنواع الملفات باستخدام فحص الامتداد ونوع MIME. أعد تسمية الملفات المرفوعة لمنع هجمات directory traversal. لا تثق أبداً في أسماء الملفات التي يقدمها المستخدم. نفذ حدود حجم الملف لمنع هجمات DoS.

تمرين عملي

  1. أنشئ API لرفع الملفات مع النقاط التالية:
    • POST /upload/profile-picture - رفع صورة واحدة مع التحقق
    • POST /upload/documents - رفع ملفات متعددة (PDF، حد أقصى 5 ملفات)
    • GET /files/:filename - تقديم الملفات المرفوعة مع المصادقة
  2. نفذ التحقق من نوع الملف (صور: jpg/png/webp، مستندات: pdf/docx)
  3. أضف معالجة الصور: تغيير حجم صور الملف الشخصي إلى 400x400px وإنشاء صور مصغرة
  4. نفذ معالجة أخطاء مناسبة لجميع سيناريوهات الرفع
  5. أضف نقطة نهاية حذف الملف مع فحوصات التفويض المناسبة
  6. اختياري: ادمج AWS S3 للتخزين السحابي بدلاً من القرص المحلي