Nagyméretű fájlok feltöltése


Nagyon nagy fájlok feltöltés PHP-vel és egyéb segédletekkelMegvá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.

  1. php_value post_max_size 100M
  2. php_value file_uploads on
  3. php_value upload_max_filesize 100M
  4. php_value post_max_size 100M
  5. php_value max_input_time 500000
  6. php_value max_execution_time 500000
  7. 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.

A Plupload több alternatív megoldás is kínál a fájlfeltöltésre

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.
  • dokumentáció, API leírás
  • példák
  • Folyamatos fejlesztés
  • 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.

Plupload több feájl feltöltése Queue-ből

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.

Ha ismersz olyan megoldás ahol 2GB-os fájlokat lazán fel tudsz tölteni weben keresztül (a fenti kívánalmak alapján), írd meg!


Flash, Upload-php, jQuery, PHP php, upload, bigfile, silverlight, gears, html5








Hozzászólások (1)

flash kijelzés / Polonkai Gábor / 2010-09-03
Bár nem próbáltam, de plupload esetében ha flash-t használ és a chunk size-t manuálisan beállítod 1M-re, akkor is 25% ugrásokkal jelez vissza?

---------
Kipróbáltam minden eshetőséget. A cikk írásakor megjelent verzióban a flash-el kapcsolatban ez volt az ábra.


Hozzászólás beküldése:


http://domain.tld (nofollow)
  ____  __  __  _  _  __  __  __  __    __   
 (_  _)(  )(  )( \/ )(  )(  )(  \/  )  /__\  
.-_)(   )(__)(  )  (  )(__)(  )    (  /(__)\ 
\____) (______)(_/\_)(______)(_/\/\_)(__)(__)



 
 
 
 
Powered By: PHP, Smarty, MySQL, CodeIgniter, jQuery, ArtH2O