تخطَّ إلى المحتوى

رفع الملفات

الدرس 13 من 38

الهدف

بعد هالدرس تقدر تبني file upload كامل: API route يولّد presigned URL، frontend يرفع مباشرة لـ Cloudflare R2، و Prisma يحفظ الـ metadata.

ليش هذا الحين؟

الإيميل جاهز والتطبيق يتواصل مع المستخدمين — الحين نضيف قدرة رفع الملفات. كثير من التطبيقات تحتاجها: صور profile، مستندات، attachments. الطريقة الغلط إنك ترفع الملف للـ server وبعدين تنقله — تبطّئ كل شي وتكلّف. الطريقة الصح: presigned URL.

الفكرة

ليش R2؟ Cloudflare R2 نفس S3 API بس بدون egress fees — يعني ما تدفع لما المستخدمين يحملون ملفاتهم. لـ startup في البداية، هذا فرق كبير في الفاتورة.

الـ Presigned URL Pattern:

  1. الـ frontend يطلب من الـ API: "أبي أرفع ملف بهالاسم وهالنوع"
  2. الـ API يتحقق من الصلاحية والحجم والنوع
  3. الـ API يولّد presigned URL من R2 (صالحة 60 ثانية)
  4. الـ frontend يرفع الملف مباشرة لـ R2 بـ PUT request
  5. الـ API يحفظ الـ metadata (URL، اسم الملف، حجمه) في Prisma

هذا يعني الملف ما يمر من server أبد — أسرع وأرخص.

التحقق المفروض يصير في الـ API، قبل ما تولّد الـ URL:

  • الحجم: 10MB كحد أقصى
  • النوع: بس الأنواع اللي تقررها
  • الصلاحية: المستخدم مسجّل دخول

الـ metadata في Prisma: الـ key في R2 (المسار) هو اللي تحفظه — بس تبني الـ public URL منه بعدين.

محتاج مساعدة؟ راسلنا على mj@shakesbeard.net