چگونه آپلود فایل را به اپ خود اضافه کنیم: ذخیرهسازی، محدودیتها و امنیت
برای افزودن آپلود فایل به اپ، فایلها را در ذخیرهسازی شیء (یک bucket) نگه دارید، نه روی دیسک سرور یا در پایگاه داده، و یک رکورد کوچک در پایگاه داده ذخیره کنید که کلید فایل، نام، حجم، نوع و مالک آن را داشته باشد. حجم و نوع فایل را روی سرور بررسی کنید، از اول تصمیم بگیرید که فایلها عمومی هستند (مثل عکس محصول) یا خصوصی (مثل فاکتور)، و فایلهای خصوصی را فقط پس از بررسی اینکه چه کسی درخواست میکند ارائه دهید. در یک ابزار ساخت اپ هوش مصنوعی میتوانید قابلیت آپلود را در یک پرامپت توصیف کنید؛ بخش مهم آزمایش این است که فایلها بعد از دیپلوی مجدد باقی بمانند و فرد اشتباهی نتواند آنها را باز کند.
تصمیم بگیرید به چه نوع آپلودی نیاز دارید
قبل از ساخت، به سه سؤال پاسخ دهید:
- چه فایلهایی؟ عکس پروفایل، تصویر محصول، PDF، صفحهگسترده، صوت، ویدیو. این تعیین میکند محدودیت نوع و حجم چیست.
- چه کسانی میتوانند ببینند؟ همه (یک گالری عمومی) یا فقط آپلودکننده و مدیران (قرارداد، مدارک هویتی، فایلهای مشتری).
- پس از آپلود چه میشود؟ فقط ذخیره، نمایش پیشنمایش، تغییر اندازه تصاویر یا خواندن محتوا.
تصاویر عمومی و اسناد خصوصی به تنظیمات متفاوتی نیاز دارند، پس ابتدا این موضوع را روشن کنید.
فایلها باید کجا باشند
| گزینه | نحوه کار | مناسب برای | نکتهای که باید مراقبش بود |
|---|---|---|---|
| ذخیرهسازی شیء (bucket) | فایلها در سرویسی که برای آن ساخته شده ذخیره میشوند؛ پایگاه داده کلید یا URL را نگه میدارد | تقریباً هر اپی | قوانین دسترسی باید درست تنظیم شوند |
| ذخیرهسازی ارائهشده توسط پلتفرم | ابزار ساخت یا میزبان شما یک bucket برایتان فعال میکند | اپهایی که روی همان پلتفرم ساخته شدهاند | محدودیتها و قیمتگذاری تابع پلتفرم است |
| دیسک سرور | فایلها روی سیستم فایل سرور اپ نوشته میشوند | فقط توسعه محلی | اغلب با راهاندازی مجدد یا دیپلوی پاک میشود |
| داخل پایگاه داده | بایتهای فایل در یک جدول ذخیره میشوند | تقریباً هرگز | پایگاه داده را حجیم میکند و پشتیبانگیری را کند میکند |
| ویجت آپلود شخص ثالث | یک سرویس آپلود میزبانیشده کل فرایند را مدیریت میکند | رسانه سنگین، تبدیل تصویر | فروشنده، حساب و صورتحساب دیگری |
برای بیشتر اپها، ذخیرهسازی شیء بههمراه یک رکورد پایگاه داده پاسخ درست است. ردیف پایگاه داده همان چیزی است که اپ جستجو میکند («اسناد این کاربر را نشان بده»)؛ bucket فقط بایتها را نگه میدارد.
فایل عمومی در برابر خصوصی
- فایلهای عمومی (عکس محصول، تصاویر بلاگ، آواتار) میتوانند از یک URL عمومی ارائه شوند. هر کسی که لینک را داشته باشد میتواند آن را باز کند، که برای این نوع محتوا اشکالی ندارد.
- فایلهای خصوصی (فاکتور، قرارداد، مدارک پزشکی یا هویتی، تحویلیهای مشتری) هرگز نباید URL عمومی قابل حدس داشته باشند. سرور بررسی میکند که کاربر واردشده مالک فایل است یا مجوز دارد، سپس فایل را پخش میکند یا یک URL امضاشده برمیگرداند: لینکی که فقط برای مدت کوتاهی کار میکند.
یک باگ رایج و جدی این است که فایلهای خصوصی در یک bucket عمومی با نامهای قابل پیشبینی ذخیره شوند. هر کسی که /uploads/invoice-102.pdf را حدس بزند، فاکتور فرد دیگری را میگیرد.
نمونه پرامپتها
آپلود یک تصویر عمومی:
به مدیران اجازه بده برای هر محصول حداکثر ۵ عکس محصول آپلود کنند. فایلهای JPG، PNG و WebP تا ۵ مگابایت برای هر فایل را بپذیر. فایلها را در ذخیرهسازی فایل نگه دار، کلید، حجم و ترتیب هر فایل را در جدول product_images ذخیره کن، و تصویر کوچک با دکمه حذف نشان بده. نوع و حجم را روی سرور اعتبارسنجی کن، نه فقط در مرورگر.
آپلود یک سند خصوصی:
یک صفحه Documents برای مشتریان واردشده اضافه کن. مشتریان میتوانند PDF تا ۲۰ مگابایت آپلود کنند. فایلها خصوصی هستند: آنها را در ذخیرهسازی فایل نگه دار، شناسه مالک، نام اصلی فایل، حجم و زمان آپلود را در جدول documents ذخیره کن، و فقط به مالک و مدیران اجازه دانلود بده. دانلودها باید از یک مسیر سرور عبور کنند که مجوز را بررسی میکند. هرگز URL عمومی برای این فایلها قرار نده.
پیگیریهای مفید:
هنگام آپلود نوار پیشرفت نشان بده و اگر فایل خیلی بزرگ یا از نوع اشتباه بود، خطای واضح نمایش بده.
وقتی یک ردیف سند حذف میشود، فایل ذخیرهشده آن را هم حذف کن.
گام به گام
- نوعها و محدودیتهای حجم را برای هر فیلد آپلود تعیین کنید. دقیق باشید: «PDF تا ۲۰ مگابایت»، نه «سند».
- ذخیرهسازی را فعال کنید. در یک ابزار ساخت هوش مصنوعی، آپلود را درخواست کنید تا خودش ذخیرهسازی را راهاندازی کند؛ در جای دیگر، یک bucket بسازید و اطلاعات دسترسی آن را بهعنوان Secret سمت سرور اضافه کنید.
- یک جدول پایگاه داده برای رکوردهای فایل بسازید: ID، مالک، کلید ذخیرهسازی، نام اصلی، نوع، حجم، زمان ایجاد.
- مسیر آپلود را روی سرور بسازید: بررسی کنید کاربر واردشده است، نوع و حجم را چک کنید، یک کلید ذخیرهسازی امن تولید کنید (نه نام فایل کاربر)، فایل را ذخیره کنید و رکورد را درج کنید.
- مسیر دانلود یا نمایش را بسازید: برای فایلهای عمومی یک URL عمومی؛ برای فایلهای خصوصی یک مسیر با بررسی مجوز یا URL امضاشده.
- رابط کاربری را بسازید: انتخاب فایل، کشیدن و رها کردن در صورت نیاز، پیشرفت، پیشنمایش و خطاها.
- حذف را مدیریت کنید تا حذف یک رکورد فایل ذخیرهشده را هم حذف کند.
- آزمایش کنید: آپلود، بارگذاری مجدد، دیپلوی یا انتشار دوباره، و بررسی اینکه فایل هنوز باز میشود. سپس با کاربر دیگری وارد شوید و سعی کنید فایل خصوصی کاربر اول را باز کنید.
اشتباهات رایج
- نوشتن آپلودها روی دیسک سرور. در توسعه کار میکند، اما بعد از راهاندازی مجدد یا دیپلوی فایلها ناپدید میشوند.
- اعتماد به بررسیهای مرورگر. تنظیم «accept» در ورودی فایل یک راهنما است، نه امنیت. نوع و حجم را روی سرور بررسی کنید.
- استفاده از نام فایل کاربر بهعنوان کلید ذخیرهسازی. نامها تداخل پیدا میکنند و ممکن است کاراکترهای عجیب داشته باشند. یک کلید یکتا تولید کنید و نام اصلی را جدا ذخیره کنید.
- bucket عمومی برای فایل خصوصی. همان موردی که بالاتر گفته شد؛ این همان مشکلی است که خبرساز میشود.
- پذیرفتن هر نوع فایل. فایلهای HTML یا SVG که از دامنه شما ارائه میشوند در برخی تنظیمات میتوانند اسکریپت اجرا کنند. فقط نوعهایی را بپذیرید که لازم دارید.
- بدون محدودیت حجم. یک آپلود خیلی بزرگ میتواند سهمیه ذخیرهسازی را ببلعد یا درخواست را timeout کند.
- فایلهای یتیم. حذف ردیف پایگاه داده بدون حذف فایل، بهتدریج فضای ذخیرهسازی را که برایش پول میدهید پر میکند.
- فراموش کردن موبایل. عکسهای گوشی میتوانند حجیم باشند و در قالبهایی مثل HEIC باشند؛ تصمیم بگیرید آنها را بپذیرید یا تبدیل کنید.
چکلیست
- فایلها به ذخیرهسازی شیء میروند، نه دیسک سرور یا پایگاه داده
- هر فایل یک رکورد پایگاه داده با مالک، کلید، نام، نوع و حجم دارد
- نوع و حجم روی سرور بررسی میشوند
- کلیدهای ذخیرهسازی تولید میشوند و از نام فایل گرفته نمیشوند
- فایلهای خصوصی فقط پس از بررسی مجوز ارائه میشوند
- کاربر دیگر نمیتواند فایلهای خصوصی شما را حتی با داشتن لینک باز کند
- حذف یک رکورد، فایل را هم حذف میکند
- فایلها پس از انتشار یا دیپلوی مجدد هنوز بارگذاری میشوند
- خطاهای آپلود، از جمله در موبایل، بهروشنی نمایش داده میشوند
آپلود فایل در Mythex
Mythex میتواند ذخیرهسازی فایل را برای یک پروژه بهطور خودکار فعال کند، وقتی اپ به آپلود نیاز داشته باشد، بنابراین لازم نیست bucket را دستی راهاندازی کنید. همچنین میتوانید در چت /storage را تایپ کنید. این قابلیت در پلنهای Free و Pro در دسترس است، با سقف ۱ گیگابایت در پلن Free، و وضعیت آن را در Settings → Storage میبینید.
مستندات صریح میگوید میزبانی منتشرشده یک سیستم فایل محلی پایدار نیست، بنابراین از عامل بخواهید از ذخیرهسازی پلتفرم استفاده کند، نه ذخیره روی دیسک. فایلهای ذخیرهشده و دانلودها از موجودی اعتباری شما کسر میشوند، بر اساس حجم و میزان دانلود؛ پلن Pro نصف نرخ Free را پرداخت میکند. برای جزئیات، ذخیرهسازی فایل را در مستندات ببینید.
آپلودها معمولاً همراه با یک پایگاه داده برای رکوردهای فایل و ورود برای فایلهای خصوصی هستند. اگر میخواهید جایی بسازید که مشتریان اسناد رد و بدل کنند، چگونه پورتال مشتری بسازیم را ببینید و پیش از راهاندازی چکلیست امنیتی را مرور کنید.
پرسشها
فایلهای آپلودشده کجا باید ذخیره شوند؟
در ذخیرهسازی شیء (سرویسی که برای فایل ساخته شده و اغلب bucket نامیده میشود)، نه روی دیسک سرور اپ و نه داخل پایگاه داده. در پایگاه داده فقط کلید یا URL فایل را بههمراه جزئیاتی مثل نام، حجم و مالک ذخیره کنید.
چرا فایلهای آپلودشده من بعد از انتشار یا دیپلوی دوباره ناپدید میشوند؟
بیشتر پلتفرمهای میزبانی دیسک محلی پایدار ندارند: وقتی اپ دوباره راهاندازی یا دیپلوی میشود، فایلهایی که روی دیسکش نوشته شدهاند از بین میروند. بهجای آن، آپلودها را در ذخیرهسازی شیء ذخیره کنید.
چگونه فایلهای آپلودشده را خصوصی نگه دارم؟
فایلها را قابلخواندن عمومی نکنید. سرور شما باید بررسی کند که کاربر واردشده اجازه دیدن فایل را دارد، سپس فایل را ارسال کند یا یک لینک امضاشده با عمر کوتاه برگرداند.
آیا Mythex از آپلود فایل پشتیبانی میکند؟
بله. Mythex وقتی اپ به آپلود نیاز داشته باشد میتواند ذخیرهسازی فایل را برای پروژه فعال کند، در پلنهای Free و Pro، با سقف ۱ گیگابایت در پلن Free. قابلیت آپلود را از عامل بخواهید یا /storage را تایپ کنید.