EN | CS | Přihlásit | Registrovat

MultipleFileUpload

MultipleFileUpload (zkráceně MFU) je doplněk pro Nette Framework, který vašim uživatelům umožní pohodlně, jednoduše a interaktivně odesílat hromady souborů. Komfort nabízí nejen uživateli, ale i programátorovi. Uživatel může na pár kliknutí odeslat celé fotoalbum a programátorovi stačí na implementaci tohoto doplňku pouhé 2 řádky kódu. Navíc tento doplněk podporuje AJAX pro maximální rychlost a uživatelské pohodlí! I na uživatele se staršími prohlížeči se myslelo. Pokud prohlížeč nesplňuje minimální požadavky, uživatel může odeslat soubory standardním způsobem.

Autor doplňku Honza Kuchař
Autor driver(ů) Honza Kuchař (sqlite a log driver), Martin Sadový (dibi driver)
Inspirováno http://forum.nette.org/…iewtopic.php?…
Licence New BSD License
Diskuse http://forum.nette.org/…form-control
Demo http://multiplefileupload.projekty.mujserver.net/
Stav Ve vývoji. Viz kapitola „Známé problémy“
Nette viz závislosti

Instalace

  1. Zkopírujte následující soubory:
    • app/controls/Mul­tipleFileUplo­ad
    • document_root/css/u­ploadify.css
    • document_root/i­mages/*
    • document_root/js/*
    • document_root/swf/*
  2. Do bootstrapu za registraci RobotLoaderu a před $application->run(); přidejte následující řádku.
    MultipleFileUpload::register();

    Tímto krokem načtete a zaregistrujete Multiple File Upload.

Pokud používáte Nette 0.9.2 nebo nižší, čtěte zde: http://forum.nette.org/…sunu-souboru . V Nette 0.9.3-RC je už tato „chyba“ opravena. http://github.com/…2f8ae53e84a1

Pokud na vašem serveru běží PHP pod (Fast)CGI, je doporučená verze Nette 0.9.4. V této verzi je už opravené získávání hlaviček. Viz http://github.com/…e84a260119db.

A potom už můžete začít Multiple File Uploader používat.

Použití

$f = new AppForm($this,$name);

$f->addMultipleFileUpload("pokus1","Testík",20)
->addRule("MultipleFileUpload::validateFilled","Musíte odeslat alespoň jeden soubor!")
->addRule("MultipleFileUpload::validateFileSize","Soubory jsou dohromady moc veliké!",1024); // 1 KB

Do formuláře je potřeba opravdu zadávat přímo callback, protože ZATÍM není podporována validace na straně klienta!

Jako hodnotu MFU ve formuláři dostanu pole ve kterém je každý soubor validní (prošel HttpUploadedFi­le::isOK()) a je instancí HttpUploadedFile. Všechny soubory co zůstanou v tempech po odeslání formuláře budou smazány.

Takto vypadá pole co dostanete ke zpracování ($hodnoty = $form->getValues();):

array(1) {
0 => object(HttpUploadedFile) (5) {
"name" private => string(15) "application.ini"
"type" private => string(24) "application/octet-stream"
"size" private => int(164)
"tmpName" private => string(107) "xxx"
"error" private => int(0)
}
}

Vzhled prvku můžete upravovat v šablonách MultipleFileUpload-withJS.phtml a MultipleFileUpload-withoutJS.phtml. Popřípadě zde můžete i měnit nastavení uploadify.

Podpora v prohlížečích

OS Prohlížeč Verze Kvalita podpory Komentář
Win7 Google Chrome 2 ***** Bez výhrad
4.1.249.1025 beta ***** Bez výhrad
Opera 10.0 ***** Bez výhrad
9.65 ***** Bez výhrad
Firefox 3.5 **** O něco pomalejší než Google Chrome a Opera. Možná je to ale způsobeno nějakým nainstalovaným doplňkem.
3.6 **** O něco pomalejší než Google Chrome a Opera. Možná je to ale způsobeno nějakým nainstalovaným doplňkem.
Internet Explorer všechny Mezi soubory z nějakých důvodů chvíli čeká. Potřeba ošetřit několik chyb v IE/Flash, aby MFU vůbec fungovalo. (viz „Závislosti“)
8 *** Soubory odesílá klidně v deseti vláknech. (ale každé vlákno vždy chvíli čeká) Tzn. funguje to v celku správně.
WinXP 6 * Soubory odesílá pouze v jednom vlákně. Tzn. taky to nějak funguje.

Pokud není váš prohlížeč v předcházející tabulce, tak prosím napište na fórum, zada ve vašem prohlížeči MFU funguje, či nikoli. A pokud ano, tak jak.

Závislosti

  • minimální verze Nette 0.9.1, 0.9.2 (nutnost přepsat HttpUploadedFi­le::move())
  • doporučená verze Nette 0.9.3
  • JavaScript: jQuery, Uploadify, swfobject.js, livequery, upravený ajax-form driver
  • originální jquery.uploadify.js nefunguje s Internet Explorerem, protože má v id objektu pomlčku. IE to interpretuje jako mínus. Proto jsem vydal upravenou verzi, kterou najdete na svn ve složce trunk/document_root/js/. (od rev. 19)
  • originální swfobject.js nefunguje v Internet Exploreru, protože Internet Explorer má bug s flashem ve formuláři. Upravenou verzi tohoto souboru najdete na svn ve složce trunk/document_root/js/. (od rev. 20)

Známé problémy

  • blíže nespecifikovaný problém na počátačích se systémem Mac

Drivery

Driver má za úkol skladovat informace o přenesených souborech a samotné soubory. V Multiple File Uploadu se driverů nachází hned několik.

Jak zaregistrovat vlastní driver? Mrkněte do bootstrapu v distribuci.

Driver Autor Licence Umístění Thread-safe Popis Instalace Stav
SQLite v. 2 Honza Kuchař New BSD distribuce ano Ukládá informace o přenesených souborech do databáze SQLite. (využívá php_sqlite; nevyžaduje dibi) Stačí povolit zápis (chmod(0777)) ve složce app/controls/dri­vers/Sqlite/da­tabase.sdb. Doporučený, Stabilní
Dibi Martin Sadový (prvotní implementace) + Honza Kuchař (učesáno; přidán workaround pro http://forum.dibiphp.com/…bytku-vstupu?…) New BSD distribuce ano Ukládá informace o přenesených souborech do jakékoli databáze, kterou podporuje Dibi. (vyžaduje Dibi; tabulku musíte v databázi ručně vytvořit; v distribuci přiloženy dumpy databází mysql (Martin) a postgres (Honza)) Zprovozníte dibi, vytvoříte tabulku files v databázi. (viz dumpy databází) Experimentální (nejspíš si ho budete muset poupravit právě pro vaši databázi, ale bez úprav by to mělo fungovat pod MySQL a PgSQL)
Log Honza Kuchař New BSD distribuce ano Nikam nic neukládá. Slouží pro vývojáře k zjištění pořadí volaných metod v driveru. Pro běžného uživatele nemá žádný význam. Nakonfigurovat Logger. (viz doplňky) Stabilní

Demo

http://multiplefileupload.projekty.mujserver.net/

SVN

https://svn.mujserver.net:8443/…pload/trunk/ (verze pro PHP 5.2.x) (uživatel: guest, heslo: (nechat prázdné))


Login to submit a comment