ازاي نعمل Resumable Uploads and Downloads للفايلات الكبيرة؟
فاكر لما تيجي ترفع فايل 3 جيجا على Drive أو Dropbox ويحصّل drop connection، ولما تعمل retry تلاقيه بيكمل من حيث وقف؟ أو لما يحصل مشكلة في الكونكشن أثناء رفع الفايل تلاقيه يكمل عادي؟
الموضوع ده اسمه Resumable File Uploads and Downloads، وده مهم جدًا لو بتتعامل مع فايلات كبيرة أو شبكة مش مستقرة.
خلينا نركز على Resumable Uploads، والفكرة الأساسية هنا تنقسم لشغل فرونت وشغل باك.
🖥️ Frontend: شغل العميل
الفرونت اند مسؤول عن تجهيز الفايل وتقسيمه، ودي الخطوات:
1️⃣ تقسيم الفايل لـ Chunks
-
كل Chunk مثلاً 5MB (الحجم بيتحدد بين الفرونت والباك).
2️⃣ حساب Checksum لكل Chunk
-
لضمان إن البيانات هتوصل سليمة.
3️⃣ إرسال أول Chunk مع Metadata
-
Metadata زي:
chunk number,chunk size,checksum,file name,total chunks -
الباك هايرجعلك File ID بعد أول Chunk.
4️⃣ رفع باقي الـ Chunks
-
كل Chunk هايكون فيه File ID لتسهيل الربط.
5️⃣ الإشارة للباك بأن ده آخر Chunk
-
ممكن تبعت Flag زي
is_lastأو تعتمد علىtotal_chunksعشان يعرف آخر واحد.
🗄️ Backend: شغل السيرفر
الباك اند مسؤول عن استقبال وتجميع الـ Chunks:
1️⃣ استقبال الـ Chunks وحساب Checksum
-
كل Chunk بيتقارن بالـ checksum اللي جاي من الفرونت لضمان السلامة.
2️⃣ إنشاء File ID وربطه بالـ first Chunk
-
مهم التأكد من Idempotency عشان لو اتبعت Chunk أكتر من مرة، ما يحصلش duplication.
3️⃣ استقبال باقي الـ Chunks وربطهم بالـ File ID
-
كل Chunk بيتخزن مع metadata الخاصة به.
4️⃣ تجميع الفايل عند آخر Chunk
-
Backend يجمع كل الـ Chunks حسب
chunk numberويطلع الفايل النهائي بالاسم الصحيح.
💡 الميزة هنا:
لو النت حصل فيه مشكلة أثناء العملية، الفرونت يعرف بالظبط منين يكمل، والباك يعرف إيه اللي لسه ما وصلش، ولما ترجع الـ connection كل حاجة تكمل طبيعي.
⚡ Sequential vs Parallel Chunk Uploads
-
اللي شرحناه لحد دلوقتي هو Sequential Chunk Upload
-
لكن ممكن نخلي الـ uploads Parallel عشان الموضوع يبقى أسرع
مثال:
-
نفترض الفايل متقسم 1000 Chunk
-
نبعث أول Chunk عادي (handshake وأخذ File ID)
-
بعد كده نرفع الـ 999 الباقيين بالتوازي حسب قدرة الشبكة
-
الفرونت يقدر يختار بناءً على حالة النت إذا هيمشي Sequential ولا Parallel
🔄 Downloads
-
الفكرة نفسها تقريبًا، بس في الاتجاه العكسي:
-
العميل ممكن يبدأ تحميل كل Chunk، يحفظه مؤقت، ولما النت يقطع يكمل من Chunk آخر لما يرجع الاتصال
✅ الخلاصة:
-
Resumable Uploads/Downloads مهمة جدًا للفايلات الكبيرة
-
Chunking + Checksum + File ID = ضمان سلامة واستمرارية العملية
-
Sequential مناسب للاتصالات الضعيفة، Parallel أسرع لو الشبكة كويسة
[ User selects large file ]
│
▼
[ Frontend splits file into chunks ]
│
▼
[ Calculate checksum for each chunk ]
│
▼
[ Upload first chunk + metadata ]
│
▼
[ Backend receives first chunk ]
│
├─> Verify checksum
├─> Create File ID
└─> Store chunk metadata
│
▼
[ Frontend receives File ID ]
│
▼
[ Upload remaining chunks ]
│
▼
[ Backend receives each chunk ]
│
├─> Verify checksum
├─> Store chunk + metadata
└─> Track chunks received
│
▼
[ Last chunk arrives? ]
│
├─> NO → wait for remaining chunks
└─> YES → assemble file by chunk number
│
▼
[ Final file ready for use ]
│
▼
[ User notified / download link available ]