Zápis vypadá jednoduše:
<input type="file" multiple="">
v HTML variantě jej můžete zkrátit i na:
<input type=file multiple>
Pomocí JavaScriptu můžete ověřit, kolik souborů uživatel vybral nebo je (resp. jejich názvy) v cyklu projít (kolekce input.files a vlastnost input.files.length).
Více: ukázka, specifikace.
Sáhněte si na soubor
Tou druhou novinkou je možnost přistupovat přímo z JavaScriptu k obsahu souborů, které uživatel vybral k uploadu pomocí klasického <input type="file">. Dosud bylo totiž nutné takové soubory nahrát na server, z něj získat zpět a teprve pak s nimi šlo dále pracovat. Alternativou bylo použití pluginů, které umožňovaly přímou práci se soubory.
Z JavaScriptu bude pomocí nového API možné zjistit nejen název takového souboru, jeho typ a velikost, ale také přistupovat k jeho obsahu a to třemi asynchronními způsoby (dnes už je takový trend dělat všechny náročnější operace asynchronně, aby nedocházelo k zamrzání stránky v prohlížeči) :
- readAsBinaryString
- readAsText
- readAsDataURL
Kompletní specifikace (poměrně čerstvá, první návrh přišel před pár týdny právě od Mozilly) počítá i s výše zmíněným přepínačem multiple (bude tedy možné např. označit všechny fotografie v adresáři a následně s nimi v JavaScriptu pracovat).
Firefox 3.6 zatím neimplementoval specifikaci celou, ale dost na to, aby si ji zájemci mohli vyzkoušet (stahujte Firefox 3.6 beta 4).
Více: video s demem, ukázka, specifikace.
Pozn.: Firefox 3.6 těch novinek přinese víc, ale pro účely tohoto příspěvku nejsou podstatné.
Pozn. 2: Specifikace je nová a zatím jsem nenašel reakce dalších prohlížečů, zda ji budou chtít podporovat nebo ne. Uvidíme.
Jesli dobre chapu, slo by s timto konecne udelat interaktivni upload souboru (progress bar apod.) ciste v Javascriptu (bez Flashe)?? Pak tedy 3x slava :)
OdpovědětVymazat@peepino Ano půjde to. Zmiňovaná File API specifikace řeší jen rozhraní disk - prohlížeč (čili přebrání jednotlivých souborů, které uživatel zadal pro upload). Pro onen vlastní upload se plánuje s rozšířením XMLHttpRequest (říká se mu XMLHttpRequest 2), kterým půjde takto přebrané soubory interaktivně odesílat.
OdpovědětVymazatNa rozdíl od File API zatím nikdo XMLHttpRequest 2 neimplementoval. Ovšem to se teď může změnit, protože až teď s příchodem File API může být celý proces kompletní.
@peepino Tak jakoby nás u Firefoxu vyslyšeli. V této ukázce je kompletní implementace progress baru pro upload (funguje jen ve FF3.6) http://hacks.mozilla.org/2009/12/uploading-files-with-xmlhttprequest/
OdpovědětVymazatMH: Moc pekny :) Diky za upozorneni..
OdpovědětVymazat