انتقال فایل بزرگ؛ از upload تکه‌ای تا لینک دانلود موقت

چرا مهم است

اگر با ارسال فایل بزرگ سروکار داری، قطع اتصال می‌تواند ارسال یک‌مرحله‌ای را از ابتدا شروع کند. و توضیح می‌دهند چطور بخش‌های دریافت‌شده ثبت می‌شوند و ارسال پس از اتصال دوباره ادامه پیدا می‌کند.

قبل از خواندن، این‌ها را بدان۵ مفهوم
Chunked Upload

روشی که فایل را به بخش‌های کوچک‌تر تقسیم می‌کند و هر بخش را با درخواستی جداگانه می‌فرستد.

در حال نگارش: Chunked Upload

Resumable Upload

روشی برای ادامه ارسال فایل پس از وقفه، با تکیه بر موقعیتی که دریافت و ذخیره داده تا آن تأیید شده است.

در حال نگارش: Resumable Upload

metadata

اطلاعات توصیفی درباره داده؛ برای یک فایل می‌تواند شامل نام، اندازه، نوع محتوا و زمان انقضا باشد.

در حال نگارش: metadata

Object Storage

شیوه‌ای برای نگهداری داده به‌صورت object که هر مورد با یک کلید مشخص قابل دسترسی است.

در حال نگارش: Object Storage

Checksum

مقداری محاسبه‌شده از داده که مقایسه آن در دو سمت انتقال، برای تشخیص تغییر یا خرابی داده به کار می‌رود.

در حال نگارش: Checksum

ارسال یک فایل چندگیگابایتی فقط پر شدن نوار پیشرفت نیست. سرویس انتقال فایل باید داده را دریافت و ذخیره کند، اطلاعات فایل را نگه دارد و اجازه دهد گیرنده بدون دسترسی به حساب فرستنده آن را دانلود کند. متن همچنین توضیح می‌دهد که چرا ایمیل برای این کار محدودیت دارد: Base64 حجم داده را حدود ۳۳ درصد افزایش می‌دهد و محدودیت پیوست معمولاً روی اندازه پیام پس از این تبدیل اعمال می‌شود.

معماری معرفی‌شده پنج بخش اصلی دارد: برنامه سمت کاربر، server دریافت فایل، بخش ذخیره‌سازی، database مربوط به metadata و server دانلود. مرورگر با File API به فایل دسترسی پیدا می‌کند و می‌تواند آن را به بخش‌های کوچک‌تر تقسیم کند. server دریافت، درخواست‌ها را می‌گیرد، هویت کاربر و داده ورودی را بررسی می‌کند و روند ارسال را هماهنگ نگه می‌دارد.

خود فایل معمولاً در Object Storage قرار می‌گیرد؛ اما metadata آن، مانند نام، اندازه، نوع محتوا، محل ذخیره، شناسه انتقال و زمان انقضا، در database ثبت می‌شود. هنگام باز شدن لینک دانلود، server مجوز دسترسی و تاریخ انقضا را بررسی می‌کند و در صورت معتبر بودن، فایل ذخیره‌شده را برای دریافت آماده می‌کند.

در Chunked Upload،؜ فایل به بخش‌های کوچک، مثلاً ۱۰ مگابایتی، تقسیم می‌شود و هر بخش با یک درخواست HTTP مستقل ارسال می‌شود. server مشخص می‌کند کدام بخش‌ها رسیده‌اند. این الگوی معماری با سازوکار HTTP chunked transfer encoding تفاوت دارد.

Resumable Upload مسئله قطع اتصال را پوشش می‌دهد: پس از اتصال دوباره، برنامه از server می‌پرسد چند byte با موفقیت دریافت و ذخیره شده است و ارسال را از همان موقعیت ادامه می‌دهد. برای بررسی سالم رسیدن هر بخش نیز می‌توان از Checksum استفاده کرد؛ دو طرف مقدار را محاسبه و مقایسه می‌کنند و در صورت تفاوت، server آن بخش را رد می‌کند و ارسال دوباره را می‌خواهد.

نکته کلیدی

تقسیم فایل را با امکان ادامه‌دادن ارسال یکی ندان. برای باید بدانی server چه مقدار از فایل را واقعاً دریافت و ذخیره کرده است؛ ادامه ارسال بر اساس همین موقعیت انجام می‌شود.

خواندن مقاله اصلی (در زبانه‌ی جدید باز می‌شود)
برچسب‌ها (۴)