Jak přidat nahrávání souborů do aplikace: úložiště, limity a zabezpečení
Soubory do aplikace nahrajete tak, že je uložíte do objektového úložiště (bucketu), ne na disk svého serveru ani do databáze, a do databáze uložíte malý záznam s klíčem souboru, názvem, velikostí, typem a vlastníkem. Velikost a typ souboru kontrolujte na serveru, dopředu rozhodněte, zda jsou soubory veřejné (například fotky produktů), nebo soukromé (například faktury), a soukromé soubory servírujte až po ověření, kdo se ptá. V AI nástroji pro tvorbu aplikací můžete funkci nahrávání popsat jedním promptem; podstatné je otestovat, že soubory přežijí nové nasazení a že je nemůže otevřít špatný člověk.
Rozhodněte, jaké nahrávání potřebujete
Před stavěním odpovězte na tři otázky:
- Jaké soubory? Profilové fotky, obrázky produktů, PDF, tabulky, audio, video. To určuje typ a limity velikosti.
- Kdo je smí vidět? Kdokoli (veřejná galerie), nebo jen nahrávající uživatel a administrátoři (smlouvy, doklady totožnosti, klientské soubory).
- Co se stane po nahrání? Jen se uloží, zobrazí se náhled, obrázky se zmenší, nebo se čte jejich obsah.
Veřejné obrázky a soukromé dokumenty potřebují jiné nastavení, proto to vyřešte jako první.
Kde mají soubory být
| Možnost | Jak funguje | Vhodné pro | Na co si dát pozor |
|---|---|---|---|
| Objektové úložiště (bucket) | Soubory jsou uložené ve službě postavené pro ně; databáze ukládá klíč nebo URL | Téměř každou aplikaci | Pravidla přístupu musí být nastavena správně |
| Úložiště poskytnuté platformou | Váš AI nástroj nebo hosting vám bucket zapne | Aplikace postavené na dané platformě | Limity a ceny se řídí platformou |
| Disk serveru | Soubory zapsané do souborového systému serveru aplikace | Jen lokální vývoj | Často se smažou při restartu nebo novém nasazení |
| V databázi | Bajty souborů uložené v tabulce | Téměř nikdy | Nafukuje databázi, zpomaluje zálohy |
| Nástroj pro nahrávání třetí strany | Hostovaná služba zvládne celý proces nahrávání | Těžká média, transformace obrázků | Další dodavatel, účet a faktura |
Pro většinu aplikací je správná odpověď objektové úložiště plus záznam v databázi. Řádek v databázi je to, na co se aplikace dotazuje („ukaž dokumenty tohoto uživatele“); bucket jen drží samotné bajty.
Veřejné a soukromé soubory
- Veřejné soubory (fotky produktů, obrázky z blogu, avatary) lze servírovat z veřejné URL. Kdokoli s odkazem je může otevřít, což je u tohoto typu obsahu v pořádku.
- Soukromé soubory (faktury, smlouvy, zdravotní nebo identifikační dokumenty, výstupy pro klienty) nesmí mít uhodnutelnou veřejnou URL. Server ověří, že přihlášený uživatel soubor vlastní nebo k němu má oprávnění, a pak ho buď po částech pošle, nebo vrátí podepsanou URL: odkaz, který funguje jen krátce.
Častou a vážnou chybou jsou soukromé soubory uložené ve veřejném bucketu s předvídatelnými názvy. Kdo uhodne /uploads/invoice-102.pdf, dostane cizí fakturu.
Příklady promptů
Nahrání veřejného obrázku:
Nech administrátory nahrát až 5 fotek produktu na jeden produkt. Přijímej JPG, PNG a WebP do 5 MB každý. Ukládej soubory do úložiště, u každého ulož klíč, velikost a pořadí do tabulky product_images a zobraz miniatury s tlačítkem pro odstranění. Typ a velikost ověřuj na serveru, ne jen v prohlížeči.
Nahrání soukromého dokumentu:
Přidej stránku Dokumenty pro přihlášené klienty. Klienti mohou nahrát PDF do 20 MB. Soubory jsou soukromé: ulož je do úložiště a do tabulky documents ulož ID vlastníka, původní název souboru, velikost a čas nahrání. Stáhnout je smí jen vlastník a administrátoři. Stahování jde přes serverovou trasu, která kontroluje oprávnění. Nikdy nevystavuj veřejnou URL pro tyto soubory.
Užitečná doplnění:
Během nahrávání zobraz ukazatel průběhu a při příliš velkém nebo špatném typu souboru jasnou chybu.
Když se smaže řádek dokumentu, smaž i uložený soubor.
Postup krok za krokem
- Určete typy a limity velikosti pro každé pole nahrávání. Buďte konkrétní: „PDF do 20 MB“, ne „dokumenty“.
- Zapněte úložiště. V AI nástroji o nahrávání požádejte a ten úložiště nastaví; jinde vytvořte bucket a jeho přihlašovací údaje uložte jako tajné údaje na serveru.
- Vytvořte tabulku v databázi pro záznamy souborů: ID, vlastník, klíč v úložišti, původní název, typ, velikost, čas vytvoření.
- Postavte serverovou trasu pro nahrání: ověřte, že je uživatel přihlášen, zkontrolujte typ a velikost, vygenerujte bezpečný klíč v úložišti (ne uživatelův název souboru), soubor uložte a vložte záznam.
- Postavte cestu pro stahování nebo zobrazení: veřejná URL pro veřejné soubory; trasa s kontrolou oprávnění nebo podepsaná URL pro soukromé.
- Postavte rozhraní: výběr souboru, případně přetažení, průběh, náhledy, chyby.
- Zajistěte mazání, aby odstranění záznamu odstranilo i uložený soubor.
- Otestujte: nahrajte, obnovte stránku, znovu nasaďte nebo publikujte a ověřte, že se soubor pořád načte. Pak se přihlaste jako jiný uživatel a zkuste otevřít soukromý soubor prvního uživatele.
Časté chyby
- Zapisování nahrávek na disk serveru. Funguje ve vývoji, pak soubory po restartu nebo novém nasazení zmizí.
- Důvěra kontrolám v prohlížeči. Atribut „accept“ u vstupu pro soubor je nápověda, ne zabezpečení. Typ a velikost kontrolujte na serveru.
- Použití názvu souboru od uživatele jako klíče v úložišti. Názvy se srážejí a mohou obsahovat divné znaky. Generujte jedinečný klíč a původní název ukládejte zvlášť.
- Veřejné buckety pro soukromé soubory. Viz výše; tohle se dostává do zpráv.
- Povolení jakéhokoli typu souboru. HTML nebo SVG servírované z vaší domény mohou v některých nastaveních spouštět skripty. Přijímejte jen typy, které potřebujete.
- Žádný limit velikosti. Jedno obří nahrání vyčerpá vaši kapacitu úložiště nebo způsobí vypršení požadavku.
- Osiřelé soubory. Smazání řádku v databázi bez souboru pomalu zaplní úložiště, za které platíte.
- Zapomenutý mobil. Fotky z telefonů bývají velké a v formátech jako HEIC; rozhodněte, zda je přijmout, nebo převést.
Kontrolní seznam
- Soubory jdou do objektového úložiště, ne na disk serveru ani do databáze
- Každý soubor má záznam v databázi s vlastníkem, klíčem, názvem, typem a velikostí
- Typ a velikost jsou kontrolovány na serveru
- Klíče v úložišti jsou generované, ne převzaté z názvu souboru
- Soukromé soubory se servírují až po kontrole oprávnění
- Jiný uživatel nemůže otevřít vaše soukromé soubory, ani když má odkaz
- Smazání záznamu smaže i soubor
- Soubory se po publikování nebo novém nasazení stále načítají
- Chyby nahrávání se zobrazují jasně, i na telefonu
Nahrávání souborů v Mythexu
Mythex může pro projekt automaticky zapnout úložiště souborů, když vaše aplikace potřebuje nahrávání, takže bucket nemusíte nastavovat ručně. Můžete také v chatu napsat /storage. Je dostupné ve plánech Free i Pro, s limitem 1 GB u plánu Free, a jeho stav uvidíte v Nastavení → Úložiště.
Dokumentace jasně uvádí, že publikovaný hosting není trvalý lokální souborový systém, takže agenta požádejte, aby použil úložiště platformy, a neukládal na disk. Uložené soubory a stahování se platí z kreditového zůstatku podle velikosti a podle toho, kolik se stáhne; plán Pro platí polovinu sazby Free. Viz Úložiště souborů v dokumentaci.
Nahrávání obvykle jde ruku v ruce s databází pro záznamy souborů a s přihlášením pro soukromé soubory. Pokud stavíte místo, kde si klienti vyměňují dokumenty, podívejte se na jak postavit klientský portál a před spuštěním projděte bezpečnostní checklist.
Otázky
Kde by se měly nahrané soubory ukládat?
V objektovém úložišti (služba postavená pro soubory, často nazývaná bucket), ne na disku serveru aplikace a ne uvnitř databáze. Do databáze ukládejte jen klíč nebo URL souboru a doplňující údaje, jako jsou název, velikost a vlastník.
Proč mi nahrané soubory po publikování nebo novém nasazení zmizí?
Většina hostingových platforem nemá trvalý lokální disk: když se aplikace restartuje nebo znovu nasadí, soubory zapsané na její disk se ztratí. Ukládejte nahrávky do objektového úložiště.
Jak udržet nahrané soubory v soukromí?
Nepřistupujte k nim jako k veřejně čitelným. Server ověří, že přihlášený uživatel smí soubor vidět, a pak ho pošle nebo vrátí krátkodobě platný podepsaný odkaz.
Podporuje Mythex nahrávání souborů?
Ano. Mythex může pro projekt zapnout úložiště souborů, pokud aplikace potřebuje nahrávání, a to ve plánech Free i Pro, s limitem 1 GB u plánu Free. O funkci nahrávání požádáte agenta nebo napíšete /storage.