HTTP je textový protokol. Tím to začíná a končí. Nikdy nebyl konstruován pro přenášení velkých balíků dat, natož binárních. Na to jsou protokoly jako FTP nebo SFTP. Ale samozřejmě jde vše obejít. Já zde popíši, jak jsem to předvedl v KWebCMS.
Problém protokolů zaměřených na přenos velkých souborů je fakt, že nejsou (z důvodů třeba ověření uživatele) uživatelsky přívětivé. A uživatel je tvor neuvěřitelně líný až (ne)schopný všeho. Vůbec problematika konfliktu jednoduchosti ověření a bezpečnosti vydá na celou stať a dlouhý flejm pod ní. Navíc oddělený protokol nezapadá do architektury běžných stránek - prostě to prohlížeč ani server společně nezvládají. Dnes se toto obchází flashovým nahráváním, které ovšem funguje jen s - ano - flashem. A ten se nějaké oblibě nyní netěší. Pak probíhá na serveru zpracování "po staru". S moderními prohlížeči ovšem přišel problém. Flash je modul mimo vlákno prohlížeče a vůči serveru se chová jako nové anonymní okno z jiného stroje. A v tu chvíli nastává problém s ověřením a otázka kam to uložit.
KWebCMS používá naopak techniky z HTML5 a přímo souborových protokolů. Tím mám na mysli javascriptové funkce, které sbírají dodané soubory a následně je předchroustají pro odeslání. A pak posílání po menších porcích a následné skládání souborů na serveru. Díky způsobu řízení výzva-odpověď je to docela přežitelné.
Uživatel prohlížeči řekne, že chce nahrát nějaké soubory. Prohlížeč zavolá pro každý soubor zvláštní postupku a vyzve server, aby mu řekl, jestli může nahrávat. Server se podívá do uživatelovy aktuální složky. Soubory se tam buď válí, a pak následuje hledání nového jména, nebo neválí, a pak server vyzve prohlížeč k posílání jednotlivých částí. Prohlížeč pak postupně odešle části a počká na odpovědi od serveru. V odpovědi na poslední balík přijde informace, že jsme skončili a je na čase to oznámit uživateli. Vedlejším produtkem tohoto stylu je i lištička s průběhem nahrávání, která ale nelže - na serveru je uloženo a dostupné přesně to, co je vyznačno.
Mám to otestované i na souborech o velikosti 1 giga a čekám, že ani větší, ač s ohledem na prostředky na druhé straně a tloušťku linky, nebudou problém. Omezením u KWebCMS je nemožnost změnit během nahrávání složku, což je ale dané kódem a ne principem. Plus je možnost přerušit nahrávání (nestabilita sítě) a začít od poslední funkční části.