Jetstack
Zpět na blog Blog

Nahrávání souborů — navazované, asynchronní a spolehlivé

Publikováno 1. října 2024

Technická ilustrace k článku Jetstacku

Nahrát jeden malý soubor přes slušné připojení je ta snadná varianta. Tu zvládne každý web. Potíže dělají ostatní případy: desetimegabajtový soubor přes rozkolísanou vlakovou Wi-Fi, která během nahrávání dvakrát vypadne. Deset souborů najednou z telefonu obchodního zástupce. Snímek obrazovky, který chce někdo vložit rovnou do tiketu, aniž by ho nejdřív ukládal na plochu. Formulář, který se překreslí kvůli chybě ve validaci — a rozdělané nahrávání najednou zmizí, takže uživatel začíná od začátku. Dobrý nástroj pro nahrávání tohle všechno zvládne potichu, a proto si ho uživatelé ani nevšimnou. Přesně tak to má být.

Ve výchozím nastavení probíhá nahrávání asynchronně. Soubory se začnou nahrávat, jakmile je vyberete nebo přetáhnete — nezávisle na formuláři, ke kterému patří, a nezávisle na tom, kdy uživatel klikne na uložení. Než vyplní zbytek formuláře a dojde k tlačítku odeslat, je nahrávání obvykle hotové. Pokud ještě není, odeslání na něj krátce počká. Uživatel tak nezůstane po kliknutí na uložit deset vteřin viset u ukazatele průběhu, což je ta nejhorší podoba, jakou nahrávání souboru může mít.

Navazované přenosy zajišťují, aby se nahrávání větších souborů nestalo sázkou do loterie. Přerušené spojení — výpadek Wi-Fi, tunel, na chvíli pozastavená záložka prohlížeče — neznamená, že se nahrávání spustí od nuly. Naváže tam, kde skončilo, dopošle zbylá data a dokončí se. U padesátimegabajtového souboru přes vratké připojení je to rozdíl mezi jedním nahráním a nekonečným kolem restartů. Většina uživatelů o téhle funkci nikdy nebude vědět — a to znamená, že funguje přesně tak, jak má.

Vložení ze schránky je drobnost, která ušetří překvapivě hodně času. Uživatelé vloží snímek obrazovky přímo do souborového pole, do komentáře nebo do libovolného editoru formátovaného textu. Žádná cesta na plochu, žádné okno „uložit jako“, žádné dohledávání souboru, který má být přiložen. Snímek putuje rovnou ze schránky do nahrávání. Pro týmy, které vytvářejí spoustu vizuálních podkladů — podpora zachycující chybová okna, designéři přikládající návrhy k úkolům, testeři dokumentující chyby — je právě tohle často to, na co lidé ukážou, když vysvětlují, co se jim na platformě líbí.

Přetažení myší zůstává hlavním způsobem, jak přidat víc souborů najednou. Přetáhněte složku na souborové pole a každý soubor se zařadí do fronty s vlastním ukazatelem průběhu. Uživatel vidí zároveň celkový průběh i průběh jednotlivých souborů, takže ho jeden pomalý soubor nenechá na pochybách, jestli se nezaseklo celé nahrávání. Řízená fronta nahrávání brání tomu, aby velké dávky zahltily server; soubory jdou nahoru kontrolovaně, což udrží prohlížeč svižný a server v klidu.

Přísliby souborů znějí technicky, ale mají velmi konkrétní přínos pro uživatele. Zatímco se soubor nahrává, formulář drží příslib, který zastupuje probíhající nahrávání. Když se formulář překreslí — kvůli chybě ve validaci u jiného pole, kvůli tomu, že uživatel odejde a zase se vrátí, nebo kvůli jakékoli události, která by běžně zahodila rozdělaný stav — příslib zůstane zachovaný. Nahrávání pokračuje na pozadí; po dokončení formulář správně přiřadí soubor k jeho poli. Uživatel nemusí nahrávat znovu jen proto, že zapomněl vyplnit nějaké povinné pole. Tenhle druh drobné odolnosti je neviditelný, když funguje, a hrozně otravný, když ne.

Správa životnosti příslibů je úklidová strana téhož mechanismu. Přísliby, které si nikdo nevyzvedne — protože uživatel formulář opustil nebo prohlížeč spadl — se nehromadí donekonečna. Platforma je v rozumných intervalech uklízí, takže úložná vrstva zůstává čistá bez ruční údržby.

Maximální velikost na pole a omezení typů souborů dávají tvůrcům aplikace kontrolu nad tím, co a kam smějí uživatelé nahrávat. Pole pro profilovou fotku omezíte na obrázky do dvou megabajtů. Pole pro přílohu smlouvy přijme PDF a wordové dokumenty do dvaceti megabajtů. Univerzální souborové pole může povolit skoro cokoli. Omezení se nastavují u každého pole zvlášť, ne globálně, takže každý kontext dostane vhodné pravidlo — a nástroj je vynucuje jak na straně prohlížeče kvůli rychlé zpětné vazbě, tak na straně serveru kvůli jistotě.

Volby nahrávání pokrývají běžné varianty ovládání. U některých polí se hodí, aby se výběr souboru otevřel automaticky, jakmile se k nim uživatel dostane — na to je přepínač „otevřít rovnou“. Jinde chcete, aby nahrávání začalo hned po výběru souboru bez dalšího potvrzení — to řeší „automatické nahrání“. A někde má být výchozí volbou výběr více souborů. Jsou to drobná nastavení a jejich správné vyladění pro každý kontext patří k maličkostem, které dohromady dají formulář působící promyšleně.

Řazení více souborů přetažením zvládá běžnou situaci, kdy na pořadí příloh záleží. Podklady k faktuře mají často zamýšlené pořadí (nejdřív hlavní faktura, pak doklady, pak přílohy). Uživatel je může přetažením přeuspořádat a pořadí se uloží spolu s formulářem. Uložené soubory u záznamu si to pořadí zachovají pro každého, kdo se na ně později podívá.

Zachování původního názvu souboru znamená, že jméno, které uživatel viděl u souboru na svém počítači, je i jméno, které zůstane. Ne vygenerovaný hash, ne varianta s časovým razítkem, ne očištěná podoba — skutečný název. To má význam pro soubory, které lidé později dohledávají („kde je ta smlouva, co jsem nahrál minulý měsíc?“), i pro exportované balíčky, jejichž součástí přílohy jsou.

Formuláře v Canvasu přebírají tentýž nástroj pro nahrávání automaticky. Souborové pole ve vlastním formuláři v Canvasu se chová stejně jako souborové pole ve standardním formuláři objektu — stejná navazovanost, stejné vkládání ze schránky, stejné přísliby, stejná omezení. Tvůrci si nemusí vybírat tvůrce formulářů podle toho, jak zachází s nahráváním; každý formulář používá tentýž nástroj.

Z pohledu formuláře vznikne po úspěšném nahrání odkaz na soubor, který si záznam podrží. Z pohledu úložiště soubor přistane v úložišti nakonfigurovaném pro dané prostředí — lokálním, cloudovém, nebo tam, kam je prostředí směrováno. Kam soubory po nahrání putují, popisuje článek o cloudovém úložišti; jak je procházet jako knihovnu, popisuje článek o úložišti souborů; a co se cestou do úložiště děje konkrétně s obrázky, popisuje článek o práci s obrázky. Nahrávání je místo, kde tohle všechno začíná.

Dobré nahrávání je nenápadná věc: když funguje, nikdo si ho nevšimne, a když ne, nikdo nezapomene. Záleželo nám na tom, aby to byla jedna z tichých částí platformy. Uživatelé, kteří si na nahrávání souborů nestěžují, mají volnou hlavu na svou skutečnou práci — a přesně o to tu jde.