Nagyméretű fájlok feltöltése
Megváltoztak a webet használó emberek szokásai. Óriási fájlokat szeretnének feltölteni és azokat megosztani. Amíg 1-2 MB-os fájlról beszélünk addig nincs gond, de mikor több száz megás vagy 1-2 Gigás fájlokkal szeretnénk ugyanezt tenni, már kénytelen az ember elgondolkodni a megvalósításról.
Nagyméretű fájlok feltöltése PHP, jQuery és egyéb segítséggel
Mások lettek a módszerek finomabbak a gyógyszerek..
Hol jelentkezhetnek korlátok:
- Feltöltendő fájlméret korlátokba ütközhetünk
- Sok ideig tart a nagy fájlok feltöltése, szkript futtatási időkorlátok
- Ezek nem sávszélesség és processzor kímélő eljárások
- Szerver fájlrendszeren tárolható max. fájlméret
- Memória korlátokba ütközhetünk
Nagyméretű fájloknál elvárás az, hogy kijelezzük éppen hol tartunk, mennyi bájtot küldtünk el, milyen a sebességünk, hány %-nál tart a feltöltés és mindezt persze dinamikusan a feltöltött adatmennyiség függvényében.
Itt már jelentkezhetnek egyéb korlátok amibe beleütközünk:
- Programnyelv adta korlátok
- Eltérő böngészőkből adódó korlátok
- Böngészőkben lévő pluginek megléte
- Böngészők biztonsági beállításai (pl.: drag and dopp fájlfeltöltés)
PHP combosítás fájlfeltöltés állapotának a kijelzésére:
Szerver oldali beállítások:
A beállításokat az Apache .htaccess fájljában is megejthetjük. Nagyjából ezek azok a változók amiknek az értékét feljebb kell tolni. Persze Plupload használatakor ennyire nem kell felhúzni őket, ha chunk-onként (darabonként) töltjük fel a fájlokat.
php_value post_max_size 100M php_value file_uploads on php_value upload_max_filesize 100M php_value post_max_size 100M php_value max_input_time 500000 php_value max_execution_time 500000 php_value memory_limit 100M
Lehetőségek Flash és jQuery, YUI, Mootols kombók:
A saját véleményem tükrözi a lista. Fentről lefelé haladva a legjobbak szerepelnek.
- http://www.plupload.com/
- http://www.uploadify.com/
- http://www.shift8creative.com/projects/agile-uploader/index.html
- http://developer.yahoo.com/yui/uploader/
- http://www.fyneworks.com/jquery/multiple-file-upload/
- http://digitarald.de/project/fancyupload/
- http://blog.stevensanderson.com/2008/11/24/jquery-ajax-uploader-plugin-with-progress-bar/
- http://the-stickman.com/files/mootools/multiupload/
- http://sourceforge.net/projects/megaupload/
- http://www.webveteran.com/blog/index.php/web-coding/coldfusion/coldfusion-file-upload-progress/
- http://pixeline.be/experiments/jqUploader/
Egyik fájlfeltöltő a másik ..
De ez nem így van! Amíg csak 100 MB körüli a fájlméret amit szeretnénk feltölteni semmi gond nincs. Erre szinte mindegyik alkalmas. A gondok nagyobb fájlnál jelentkeznek, főleg akkor ha sok felhasználó szeretné ezt megtenni egy időben.

Miben jobb a Plupload?
- Képes nagyméretű fájlokat töredékekben feltölteni (Chunking)
- Stream feltöltésre képes
- Képes a feltöltésre több alternatívát adni
- Átméretezi a képeket
- Szűr fájltípusra, fájlméretre
- Kijelzi a feltöltési értékeket
- Képes várakozó sort kezelni így több fájl kiválasztásakor szépen sorban elkezdi feltölteni.
- Jó dokumentáció, API leírás
- Jó példák
- Folyamatos fejlesztés
- Jó irányvonal az alternatívák egyszerű használatára
- Több nagy projekt is ezt választott alternatívaként fájlfeltöltéshez
Chunking:
Nem próbál meg 1 GB méretű fájlt feltölteni egyben, hanem részletekben pl.: 1MB csomagonként küldi el a PHP fájlunk felé.
Feltöltési alternatívák:
- Gears HTML 5 Silverlight BrowserPlus HTML 4
- A config részben csak a sorrendet kell megadni is a program választ a meglévő plugin-jeinknek megfelelően. Általam ajánlott sorrend: silverlight,gears,flash,html5,BrowserPlus,html4.
Flash:
Csak kijelzésénél van egy kis gond 25%-on ként válaszolgat, nagy fájlnál olyan mintha lefagyna a feltöltés. (működik, de mintha el sem indulna) A feltöltés megy de ritkán ad választ róla. A legtöbb böngészőben telepítve van. Drag and drop nincs támogatva. IE-ben is gyatra a dolog.
Gears:
Ez jó volna de külön kéne telepíteni.
Újabb Firefox típusoknál kompatibilitási hibák lehetnek. Támogat minden funkciót.
Silverlight:
Külön kell telepíteni ezzel működik a legstabilabban. A válaszidők jók, nagyon jó kijelzőt lehet fabrikálni hozzá. Drag and Drop nincs támogatva, Linuxon rezeg a léc. Viszont a legnagyobb előnye, hogy minden böngészőben hozza ezt a teljesítményt. IE-ben is jó, Win FF-ben is.
HTML5:
Chunking nincs támogatva, a többi és részben. Böngészők sem mind támogatja, sajnos felejtős.
BrowserPlus:
Ígéretesnek tűnik, de több esetben nem sikerült vele a feltöltés. Így bár a fejlesztők jókat írnak róla, a tapasztalat mégsem ezt mutatja. Yahoo fejlesztés az alkalmazásával egyszerűbben csinálhatunk webes alkalmazást desktop funkcionalitással.
HTML4:
Jó hogy van kategória, szinte semmit nem tud ebben az esetben.

Teszt eredmények:
A tesztek során a Silverlight-al működött a legjobban a Plupload, ha az a szempont hogy %-on ként jelezzük ki a feltöltés menetét. Ha nem szempont akkor a Flash is megfelelő itt ritkán kapunk választ (infót) a feltöltés állapotáról. Ellenben nem próbál egyben feltolni egy nagyobb fájlt mint a többi.
Flash haktivity Plupload-hoz:
Nagy valószínűséggel mivel fejlesztik a cuccot, erre a jövőben nem lesz szükség de ha mégis. A Flash feltöltő 25%-onként változik. Közben olyan mintha semmit nem csinálna, még akkor is így érzed ha egy Ajax loader tekereg a képen .
Hogy lehet ezen segíteni?
Feltöltés megkezdésekor elküldi a TMP fájl nevét és megkapjuk az eredeti méretét (meg egy sor más adatunk is van a fájlról). Ezeknek a paramétereknek az ismeretében kell egy JavaScript kódot fabrikálni ami időnként lekérdezi a TMP fájl méretét és kiírja. Fontos hogy a script amit hívogatunk villámgyors választ adjon és ne inicializálja a teljes rendszert.. nem kell adatbázis csak egyszerű fájl művelet, kis matek és echo..
Probléma (attól még a Flash továbbra is 25%-onként fog válaszolni):
de a TMP fájl mérete csak 25%-onként változik.. Nem gond elindítjuk a számlálót és pörgetjük véletlenszerű értékekkel, majd mikor megjön a válasz felhúzzuk arra az értékre (és megy tovább a műsor). A felhasználónak ez csak azért kell hogy lássa hogy valami történik a háttérben.
Konklúzió:
Nem vagyok elájulva attól, hogy az emberek úgy akarják használni a webet mintha a saját fájlrendszerükön másolgatnának fájlokat. Attól meg pláne nem vagyok boldog hogy akkora fájlokat akarnak feltölteni ami már botrány. De a megváltozott felhasználói szokásokra ez egy lehetséges megoldás.
További megjegyzés
Én Linuxot használok, ott nincs egyenlőre Silverlight viszont a MoonLight-ot ajánlják helyette. Hát azt kell hogy mondjam, durván nem működik úgy mint a Win-es SliverLight.
Vannak alternatív megoldások amik sokkal jobbak, de kevés bérelt tárhelyen futtathatunk ilyet: Python, Perl, Node.JS ahol már előregyártott Lib-ek vagy pédák várják az embert a feladat megoldására.
---------
Kipróbáltam minden eshetőséget. A cikk írásakor megjelent verzióban a flash-el kapcsolatban ez volt az ábra.