Посібники

Як додати завантаження файлів до застосунку: сховище, ліміти та безпека

Щоб додати завантаження файлів до застосунку, зберігайте файли в об'єктному сховищі (bucket), а не на диску сервера й не в базі даних, а в базі даних зберігайте невеликий запис із ключем файлу, назвою, розміром, типом і власником. Перевіряйте розмір і тип файлу на сервері, заздалегідь вирішіть, чи файли публічні (як фото товарів) чи приватні (як рахунки), і віддавайте приватні файли лише після перевірки того, хто їх запитує. У конструкторі застосунків на базі ШІ можна описати функцію завантаження одним промптом; важливо протестувати, що файли переживають повторне розгортання і їх не може відкрити не той користувач.

Визначте, які завантаження вам потрібні

Перед створенням відповідьте на три запитання:

  1. Які файли? Фото профілю, зображення товарів, PDF, таблиці, аудіо, відео. Від цього залежать обмеження типу та розміру.
  2. Хто їх може бачити? Усі (публічна галерея) або лише той, хто завантажив, та адміністратори (контракти, документи, що посвідчують особу, файли клієнтів).
  3. Що відбувається після завантаження? Просто зберегти, показати попередній перегляд, змінити розмір зображень чи прочитати вміст.

Публічні зображення та приватні документи потребують різних налаштувань, тож спершу визначте це.

Де мають зберігатися файли

ВаріантЯк працюєДля чого добреНа що звернути увагу
Об'єктне сховище (bucket)Файли зберігаються в сервісі, створеному для цього; база даних зберігає ключ або URLМайже будь-який застосунокПравила доступу мають бути налаштовані правильно
Сховище від платформиКонструктор застосунків або хостинг вмикає для вас bucketЗастосунки на цій платформіЛіміти та ціни визначаються платформою
Диск сервераФайли записуються у файлову систему сервера застосункуЛише локальна розробкаЧасто очищується під час перезапуску або повторного розгортання
У базі данихБайти файлу зберігаються в таблиціМайже ніколиРоздуває базу даних, сповільнює резервне копіювання
Сторонній віджет завантаженняХостинговий сервіс обробляє весь процесВажкі медіа, трансформації зображеньЩе один постачальник, обліковий запис і рахунок

Для більшості застосунків правильна відповідь — об'єктне сховище плюс запис у базі даних. Рядок у базі даних — це те, що запитує ваш застосунок («покажи документи цього користувача»); bucket лише тримає самі байти.

Публічні та приватні файли

  • Публічні файли (фото товарів, зображення для блогу, аватари) можна віддавати з публічного URL. Будь-хто з посиланням може їх відкрити, і для такого контенту це нормально.
  • Приватні файли (рахунки, контракти, медичні чи документи, що посвідчують особу, результати роботи для клієнтів) ніколи не повинні мати публічного URL, який можна вгадати. Сервер перевіряє, що користувач, який увійшов, є власником файлу або має дозвіл, а потім або передає файл, або повертає підписане посилання: посилання, що працює лише короткий час.

Поширена та серйозна помилка — приватні файли в публічному bucket із передбачуваними назвами. Той, хто вгадає /uploads/invoice-102.pdf, отримає чужий рахунок.

Приклади промптів

Публічне завантаження зображень:

Дозволь адміністраторам завантажувати до 5 фото товару на кожен товар. Приймай JPG, PNG і WebP до 5 МБ кожне. Зберігай файли у файловому сховищі, записуй ключ, розмір і порядок кожного файлу в таблицю product_images і показуй мініатюри з кнопкою видалення. Перевіряй тип і розмір на сервері, а не лише в браузері.

Завантаження приватного документа:

Додай сторінку Documents для клієнтів, які увійшли. Клієнти можуть завантажувати PDF до 20 МБ. Файли приватні: зберігай їх у файловому сховищі, записуй ID власника, оригінальну назву файлу, розмір і час завантаження в таблицю documents, і дозволяй завантажувати їх лише власнику та адміністраторам. Завантаження йде через серверний маршрут, який перевіряє дозвіл. Ніколи не відкривай публічний URL для цих файлів.

Корисні доповнення:

Показуй індикатор прогресу під час завантаження та чітку помилку, якщо файл завеликий або неправильного типу.

Коли рядок документа видаляється, видаляй і збережений файл.

Крок за кроком

  1. Визначте типи та ліміти розміру для кожного поля завантаження. Будьте конкретними: «PDF до 20 МБ», а не «документи».
  2. Увімкніть сховище. У конструкторі на базі ШІ попросіть про завантаження — він налаштує сховище; в інших місцях створіть bucket і додайте його облікові дані як секрети на сервері.
  3. Створіть таблицю в базі даних для записів про файли: ID, власник, ключ сховища, початкова назва, тип, розмір, час створення.
  4. Побудуйте маршрут завантаження на сервері: перевірте, що користувач увійшов, перевірте тип і розмір, згенеруйте безпечний ключ сховища (а не ім'я файлу користувача), збережіть файл, вставте запис.
  5. Побудуйте шлях завантаження або показу: публічний URL для публічних файлів; маршрут із перевіркою дозволу або підписане посилання для приватних.
  6. Побудуйте інтерфейс: вибір файлу, за потреби перетягування, прогрес, попередній перегляд, помилки.
  7. Обробляйте видалення, щоб видалення запису також видаляло збережений файл.
  8. Тестуйте: завантажте, перезавантажте сторінку, повторно розгорніть або опублікуйте й перевірте, що файл досі відкривається. Потім увійдіть як інший користувач і спробуйте відкрити приватний файл першого.

Типові помилки

  • Запис завантажень на диск сервера. Працює в розробці, а потім файли зникають після перезапуску або повторного розгортання.
  • Довіра до перевірок браузера. Налаштування «accept» у полі вибору файлу — це підказка, а не безпека. Перевіряйте тип і розмір на сервері.
  • Використання імені файлу користувача як ключа сховища. Назви збігаються і можуть містити дивні символи. Генеруйте унікальний ключ, а оригінальну назву зберігайте окремо.
  • Публічні bucket для приватних файлів. Див. вище; саме ця помилка потрапляє в новини.
  • Дозвіл будь-яких типів файлів. HTML або SVG, що віддаються з вашого домену, у деяких налаштуваннях можуть запускати скрипти. Приймайте лише потрібні типи.
  • Немає ліміту розміру. Одне величезне завантаження може з'їсти ліміт сховища або викликати тайм-аут запиту.
  • Осиротілі файли. Видалення рядка в базі даних без видалення файлу поступово заповнює сховище, за яке ви платите.
  • Забуті мобільні пристрої. Фото з телефона можуть бути великими та в форматах на кшталт HEIC; вирішіть, приймати їх чи конвертувати.

Контрольний список

  • Файли йдуть в об'єктне сховище, а не на диск сервера чи в базу даних
  • Кожен файл має запис у базі даних із власником, ключем, назвою, типом і розміром
  • Тип і розмір перевіряються на сервері
  • Ключі сховища генеруються, а не беруться з імені файлу
  • Приватні файли віддаються лише після перевірки дозволу
  • Інший користувач не може відкрити ваші приватні файли, навіть за посиланням
  • Видалення запису видаляє файл
  • Файли досі відкриваються після публікації або повторного розгортання
  • Помилки завантаження показуються чітко, зокрема на телефоні

Завантаження файлів у Mythex

Mythex може автоматично ввімкнути файлове сховище для проєкту, коли вашому застосунку потрібні завантаження, тож bucket не доводиться налаштовувати вручну. Також можна ввести /storage у чаті. Воно доступне на Free і Pro, з обмеженням 1 ГБ на Free, а його статус видно в Settings → Storage.

Документація прямо каже, що опублікований хостинг не є постійною локальною файловою системою, тож просіть агента використовувати сховище платформи, а не зберігати на диск. Збережені файли та завантаження оплачуються з вашого балансу кредитів за розміром і за обсягом завантажень; на Pro ціна вдвічі нижча, ніж на Free. Див. File storage у документації.

Завантаження зазвичай йдуть разом з базою даних для записів про файли та входом для приватних файлів. Якщо ви створюєте місце, де клієнти обмінюються документами, див. як створити клієнтський портал, а перед запуском пройдіть контрольний список безпеки.

Запитання

Де слід зберігати завантажені файли?

В об'єктному сховищі (сервісі, створеному для файлів, який часто називають bucket), а не на диску сервера застосунку й не всередині бази даних. У базі даних зберігайте лише ключ або URL файлу, а також такі відомості, як назва, розмір і власник.

Чому мої завантажені файли зникають після публікації або повторного розгортання?

Більшість хостингових платформ не має постійного локального диска: коли застосунок перезапускається або розгортається знову, файли, записані на його диск, губляться. Зберігайте завантаження в об'єктному сховищі.

Як зберегти завантажені файли приватними?

Не робіть файли публічно доступними для читання. Нехай ваш сервер перевіряє, що користувач, який увійшов, має право бачити файл, а потім надсилає його або повертає посилання з коротким терміном дії.

Чи підтримує Mythex завантаження файлів?

Так. Mythex може ввімкнути файлове сховище для проєкту, коли застосунку потрібні завантаження, на тарифах Free і Pro, з обмеженням 1 ГБ на Free. Ви просите агента про функцію завантаження або вводите /storage.

Mythex · Pricing · Створюйте що завгодно з ШІ · Шаблони сайтів і застосунків · Порівняння Mythex · Глосарій створення застосунків за допомогою ШІ · Безкоштовні інструменти для створення застосунків за допомогою ШІ · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)