Diskuse k MultiFileUpload
- pidiclovek
- Člen | 91
Ahoj, už se asi dvě hodiny trápím s tímto addonem a jeho použitím v modulech. Nedaří se mi vůbec nahodit uploader, ikdyž všechny cesty jsou správné ve finálním zdrojáku – např k flashi či skriptům, uploader se nenačte a jen vyhodí hlášku There is no support for any of these: html5,flash,silverlight.
Nasimulovat lze lehce, stačí vytvořit např AdminModule, do kterého přesunout HomepagePresenter s šablonou, upravit extends na \BasePresenter a do bootstrapu přidat routu
$router[] = $adminRouter = new RouteList('Admin');
$adminRouter[] = new Route('admin/<presenter>/<action>', 'Homepage:default');
už jsem vyzkoušel snad vše, zdrojáky prošel od shora dolů… prosím o radu
- pidiclovek
- Člen | 91
Díky za odpověď, ale tím to určitě není, můj prohlížeč podporuje všechny tři uvedené, jinak by ani nemohlo fungovat demo , kdy není presenter v žádném modulu. Stačí jej přesunout i s templatou do nějakého modulu a přidat routu viz výše a jste tam, kte jsem já. Kde je jen zakopanej ten pes :)
Zkoušel jsem si i hrát s konstantou BASE_PATH tak, aby všechny cesty ve spouštěcím scriptu plupload seděli, nicméně neuspěl jsem.
- pidiclovek
- Člen | 91
@echo Ahoj, díky za reakci, už si nevím rady, připadám si jako trouba, bude to nějaká pitomost… Ukázka mi funguje bez problémů, tady je link na skeleton s použitím modulu, je to jen upravená původní ukázka. Head componenta se normálně načítá, kontroloval jsem i cesty k těm skriptům a jsou vpořádku.
Mockrát díky za pomoc! :)
- echo
- Člen | 134
Nakonec jsou problémem přece jen cesty. Viz. /mfu/www/admin/temp/jsloader-148eb4fdd989.js?1313699074". /admin/ je tam evidentně navíc. Tady bude asi nějaký problémek u cssLoaderu, neboť cesta jemu předaná je správná, nebo jsem tu chybu způsobil já, když jsem jej upravoval. Každopádně navrhuji vytvořit Head mimo modul a upravit BASE_PATH, pak by to mělo šlapat.
- echo
- Člen | 134
Tak heureka.
Problém nebyly cesty k pluploadu, ale cesty k jquery :-). Má metoda
BASE_PATH co je v ukázce není zrovna nejšťastnější a tím pádem všude,
kde byla použita, se BASE_PATH vypisovala špatně (viz. předchozí post).
Stačí to nějak kulantně ošetřit v \BasePresenteru a je to.
PS: Doporučuji FireBug, je to nástroj k nezaplacení.
- pidiclovek
- Člen | 91
Díky za pomoc! Firebug používám, ale ne uplně na všechno, což asi změním :) Teď už to podle výše uvedeného snad dokopu do zdárného konce, díky :)
- pidiclovek
- Člen | 91
Tak jsem tu opět :(… Mým problémem je callbacková fce, ve které chci ukládat soubory, respektive jejich názvy do db. V tom by neměl být problém, ale!
Funkce callbacku, a tedy i upload souboru jsou úspěšné jen tehdy, pokud
se o zápis nepokusím, což je opravdu divné, jedinné co mě napadá je
nějaký timeout uploaderu pro callbackovou fci…
Protože s tímto kódem:
<?php
$fileName = $class->getSanitizedName();
$pi = pathinfo($fileName);
$file = $pi['filename'];
$ext = $pi['extension'];
$path = UPLOAD_DIR . '/' . $this->lang . "_" . $this->uploadFolder . '/'
. Strings::webalize($this->uploadObject->title) . "/";
$additionalToken = 0;
if (file_exists($path . $class->getSanitizedName()))
do{
$additionalToken++;
}while (file_exists($path . $file.$additionalToken. ".".$ext));
if ($additionalToken == 0)
$finalFileName = $class->getSanitizedName();
else
$finalFileName = $file . $additionalToken . "." . $ext;
$class->move($path . $finalFileName);
//$this->models->links->savePicture($this->uploadObject->id, $finalFileName, $this->lang);
//$this->models->links->hasPictures($this->uploadObject->id, $this->lang);
?>
proběhne upload úspěšně, zatímco když odkomentuji poslední dva řádky, což je přes model loader uložení do db, upload spadne s hláškou IO error.Error #2032. Obě dvě metody pro uložení do db jsou vpořádku, při zavolání odjinud fungují tak jak mají. V čem může být problém?
Kód továrničky na mfu je stejný jako v demu. Mohl bych si ce přidat pod uploader tlačítko pro uložení do db, ale to mi přijde uživatelsky opravdu nevhodné, mohlo by se na to zapomínat…
V kódu až do metody move také problém není, bez něj se to chová stejně :(
- pidiclovek
- Člen | 91
Tak je na místě omluva, příspěvek výše můžete klidně smazat, ať to nikoho nemate a případně neodradí od této skvělé komponenty, za kterou tímto děkuji :)
chyba byla v špatně zapsaném mkdir, zapomněl jsem na parametr rekurze. Možný poznatek pro ostatní:
Pokud uděláte v callbacku chybu, neozve se laděnka, ale projeví
se to právě errorem IO error.Error #2032
, snad to
alespoň někomu pomůže :)
- echo
- Člen | 134
Pro ověřování funkčnosti callbacků je dobré nastavit runtime na html5 a ověřovat si průběh v konzoli firebugu. Až je vše odladěné stačí přehodit runtimes apod. Tady doporučuji flash, neboť jak se zdá html5 má problém s většími soubory (50MB+) neprošlo, resp. nezačalo se ani uploadovat. Flash touto vadou netrpí, testoval jsem na 350MB souborech.
- Honza Kuchař
- Člen | 1662
Žádám autora tohoto doplňku o přesunutí komponenty do sekce formulářů na stránce doplňků a nějakém jednoznačném oddělení od původní komponenty tedy MultipleFileUploaderu. (i mě samotného to zmátlo a divil jsem se, kdo že mi to přepsal doplněk) Nebo je to parazitování, na již zaběhnutém produktu? Pánové vzpamatujte se, když někdo krade kód, chápu to, ale jména snad krást nebudeme, ne?
- Jack06
- Člen | 168
Nu nevím, zda to připadá divné jenom mě, ale trochu nechápu konstrukce.
složka mfu je v:
app/mfu - ok to bych si upravil jako app/components/mfu
Nicméně v inicializaci komponent odkazuješ na:
BASE_PATH . '/mfu' - tedy do složky root/mfu, jenomže ve složce rootu bývá: app, libs, www, temp, uploads
Tak jsem jen slepej, nebo mi to nesedí. Není náhodou z venku zákaz vstupu do app?? Čiže pak je blbost ta inicializace složek.
Poprosil bych tedy o objasnění a popřípadě uvedení proč to má fungovat a kde se správně zadefinuje složka uploads
- Jack06
- Člen | 168
22 napsal(a):
asi bych napřed prošel http://cs.metrostate.edu/…h01Notes.htm
Nu to číst nepotřebuju. Prošel jsem si už ty dvě třídy takže už v pohodě.
- zopper
- Člen | 20
Jack06 napsal(a):
Nicméně v inicializaci komponent odkazuješ na:
BASE_PATH . '/mfu' - tedy do složky root/mfu, jenomže ve složce rootu bývá: app, libs, www, temp, uploads
BASE_PATH v tomto případě má obsahovat cestu ke stejnému adresáři, jako WWW_DIR, akorát z pohledu serveru a nikoliv klienta. Tak to aspoň mě funguje.
Zato řeším, jak navázat invalidaci snippetů, nebo aspoň jakýkoliv js callback po dokončení nahrávání (úspěšném, ale i neúspěšném).
EDIT: koukám, že reaguju pozdě, nevadí :D
EDIT2: callback aktuálně řeším úpravou jquery.ui.plupload.js, ale nevím, jestli to je čisté řešení… (co potřebuju – na stránce s uploadem je i seznam souborů, který se musí aktualizovat – invaliduju snippety)
Editoval zopper (7. 9. 2011 12:43)
- Jack06
- Člen | 168
Taky to momentálně chci řešit, tak pokud někdo dosáhnete úspěšného
výsledku nebylo by od věci to sem hodi.
Krom tohoto mám ještě jeden problém – při uploadu jsem na určité
adrese:
http://www.expample.com/<presenter>/<action>/<id>
při zobrazení upload formuláře id mám a dokonce se mi i hlásí v konzoli
a správně. Nicméně pokud odešlu upload, tak v parametru id mám prázdno a
nedaří se mi to záplatovat.
Po postu vypadá $this->presenter->getParam() takto:
array(3) {
["action"]=>
string(7) "content"
["id"]=>
NULL
["do"]=>
string(15) "photoAdd-Upload"
}
Díky
EDIT: Nu tak id parametr asi vyřeším přes multipart_params.
EDIT2: jen ještě taková technická, to k tomu budu muset přistupovat přes hnusný $_REQUEST?
Editoval Jack06 (8. 9. 2011 15:58)
- echo
- Člen | 134
@Honza Kuchař
Omlouvám se za pozdní odpověď.
Přesouvat pod formuláře je značně nelogické, neboť komponenta nemá s Nette\Forms nic společného.
Přejmenovat by se to mohlo, ovšem osobně mě nic výstižnějšího nenapadá, navíc je komponenta popsána a je jasně uvedeno, že se jedná o plupload.
O parazitování se nejedná, komponentu jsem napsal s ohledem na nefunkčnost tvého pluginu pro aktuální verzi Nette. Kvůli časové tísni pro mě bylo výhodnější napsat si komponentu vlastní – a tu pak sdílet, než-li studovat a upravovat tvou.
Každopádně jsem zvědav na pokračování vývoje MultipleFileUploaderu. Hodně zdaru.
- echo
- Člen | 134
saimons napsal(a):
Jakym zpusobem lze po dokonceni nahravani invalidovat snippet pod uploadovacim oknem?
Pokud jsem na tuto stranku nahral doplnek nette jquery ajax tak mi nefunguje mfu.
Nette jquery ajax by měl fungovat, zkus přehodit pořadí načítání scriptů na: jquery, jquery_ui, jquery_nette, plupload
- Upravit nastavení plupload, aby posílal „ajaxový“ header a volal funkci pro invalidaci snippetu $.nette.success
// Setup gears version
$("#uploader{!$token}").plupload({
// General settings
runtimes : {$runtimes},
url : {link Upload!},
max_file_size : {$maxFileSize},
chunk_size : {$maxChunkSize},
flash_swf_url : {$flashUrl},
silverlight_xap_url : {$silverlightUrl},
headers: {'X-Requested-With': 'XMLHttpRequest'},
init : {
// Called when a file has finished uploading
FileUploaded: function(up, file, info) {
var json = jQuery.parseJSON(info.response);
$.nette.success(json);
}
}
});
- Zakomentovat řádek 269 v souboru Uploader.php
//die('{"jsonrpc" : "2.0", "result" : null, "id" : "id"}');
- Leinad
- Člen | 23
Hodil by se update tohoto doplňku. Nefungovala mi HTML5 verze, dost možná kvůli http://www.plupload.com/…iewtopic.php?… a povedlo se mi to vyřešit updatem na novější plupload.
- platinix
- Člen | 1
Použil jsem poslední verzi komponenty (Plupload 2.0), podařilo se mi ji rozchodit, ale nefunguje mi tlačítko „Start upload“. Po jeho stisknutí se nic nestane, zároveň se nevypíše chyba do konzole. Nemá s tím někdo zkušenost?
Start nahrávání jsem vynutil vlastním click handlerem:
$("#uploader-test_start").live("click", function (event) {
var uploader = $(".plupload").plupload("getUploader");
uploader.start();
});
- michal.lohnisky
- Člen | 64
platinix napsal(a):
Použil jsem poslední verzi komponenty (Plupload 2.0), podařilo se mi ji rozchodit, ale nefunguje mi tlačítko „Start upload“. Po jeho stisknutí se nic nestane, zároveň se nevypíše chyba do konzole. Nemá s tím někdo zkušenost?
Start nahrávání jsem vynutil vlastním click handlerem:
$("#uploader-test_start").live("click", function (event) { var uploader = $(".plupload").plupload("getUploader"); uploader.start(); });
Díky za fix, stalo se mi to stejné.
Také bych se přimluvil za to, co napsal Hafran
- echo
- Člen | 134
Hafran napsal(a):
Mohl bych požádat o nějaké funkční online demo, nebo alespoň vysvětlení v čem se komponenta liší od MFU ? Nechce se mi ji rozchodit, abych pak zjistil, že to nedělá to co chci, díky. :)
Zdravím,
komponenta vznikla proto, že MFU nebylo funkční na Nette 2.0 a ani dnes
není oficiálně podporováno. Jednoduše se mi nechtělo čekat nebo zkoumat
zdrojové kódy. Komponentu jsem dokončil a zveřejnil.
MFU má z konceptu větší potenciál, protože není vázáno na konkrétní JS.
Rozchodit by to neměl být problém, alespoň na čistém sandboxu ne. Stačí okopírovat z GitHubu, JS se načte černou magií, pokud nechcete jinak.
Co se účelu týče. Po úspěšném nahrání souboru se zavolá callback, kterému se předá Nette\Http\FileUpload. Callback se volá po nahrátí každého souboru, ne najednou.
To je celé. :)
- Hafran
- Člen | 121
Ok díky, určitě by ale neškodilo dát na stránku addonů příklad zpracování obrázků (zdůraznit to Nette/Http/FileUpload). :)
Máš v plánu nějak spravit to tlačítko „start upload“ a zavést ten handler na onQueueComplete? Dost by to pomohlo. Navíc mi konzole hází nějakou JS chybu, ale vypadá to že to bude něco v JQuery a na funkčnosti to nevadí.
- echo
- Člen | 134
Upload tlačítko nespravím, protože je to chyba Pluploadu ⇒ stáhnout novou verzi a nahradit soubory na příslušných místech.
Eventy přidávat nebudu, nepotřebuju je. Pokud ty ano, vyrob si novou komponentu. Inspiruj se tímto: https://github.com/…UIWidget.php a eventy nastav v šabloně podle http://www.plupload.com/…e_events.php.
Řekl bych, že je to dost flexibilní, ale nesnaží se být univerzální.
- michal.lohnisky
- Člen | 64
Neměly by se ve třídě JQueryUIWidget
ve funkcích
__construct
a attached
volat rodičovské metody?
Editoval michal.lohnisky (21. 1. 2013 17:24)
- echo
- Člen | 134
michal.lohnisky napsal(a):
Neměly by se ve třídě
JQueryUIWidget
ve funkcích__construct
aattached
volat rodičovské metody?
Jaké metody máš na mysli? Konstruktor je v rodičovských třídách
přítomen pouze v Nette\ComponentModel\Component a je de facto nepovinný.
Attached se volá, když se komponenta připojí do stromu komponent
v presenteru. Zde je pouze kvůli magickému načítání js a css pro lenivce,
jiný účel nemá.
- michal.lohnisky
- Člen | 64
Já jsem si tento plugin upravoval a chtěl jsem si předat do
handleUpload
nějaké parametry, ale dokud jsem nepřidal volání
rodičovských metod, tak se mi žádné parametry nepředaly.
- rohlizde
- Člen | 4
Ahoj, mam takový problém. Úspěšně se mi podařila implementace plupload pluginu, ale nefunguje mi callback funkce na upload souboru. Soubor se nahraje do TEMP složky v pořádku. Ale když volám
public function uploadImage(\Nette\Http\FileUpload $plupload){
$plupload->move('/uploads');
}
Tak to vzhodí v opeře dragonfly. záložka network->preview:
There is no support for any of these: html5,flash
a obrázek se nenahraje. To samé se stane při pokusu ručně přes move_uploaded_file. Zkoušel jsem i absolutní cestu…
- echo
- Člen | 134
rohlizde napsal(a):
Ahoj, mam takový problém. Úspěšně se mi podařila implementace plupload pluginu, ale nefunguje mi callback funkce na upload souboru. Soubor se nahraje do TEMP složky v pořádku. Ale když volám
public function uploadImage(\Nette\Http\FileUpload $plupload){ $plupload->move('/uploads'); }
Tak to vzhodí v opeře dragonfly. záložka network->preview:
There is no support for any of these: html5,flash
a obrázek se nenahraje. To samé se stane při pokusu ručně přes move_uploaded_file. Zkoušel jsem i absolutní cestu…
Zdravím, dle api https://api.nette.org/…oad.php.html#149 máte špatně nastaven přesun – je nutné uvést celou cestu k souboru, nikoliv pouze adresář.
Zaměňte za:
public function uploadImage(\Nette\Http\FileUpload $plupload){
$plupload->move('/uploads/'.$plupload->getName());
}
Kdyby to nepomohlo, uveďte prosím celou implementaci.
- rohlizde
- Člen | 4
echo napsal(a):
rohlizde napsal(a):
Ahoj, mam takový problém. Úspěšně se mi podařila implementace plupload pluginu, ale nefunguje mi callback funkce na upload souboru. Soubor se nahraje do TEMP složky v pořádku. Ale když volám
public function uploadImage(\Nette\Http\FileUpload $plupload){ $plupload->move('/uploads'); }
Tak to vzhodí v opeře dragonfly. záložka network->preview:
There is no support for any of these: html5,flash
a obrázek se nenahraje. To samé se stane při pokusu ručně přes move_uploaded_file. Zkoušel jsem i absolutní cestu…
Zdravím, dle api https://api.nette.org/…oad.php.html#149 máte špatně nastaven přesun – je nutné uvést celou cestu k souboru, nikoliv pouze adresář.
Zaměňte za:
public function uploadImage(\Nette\Http\FileUpload $plupload){ $plupload->move('/uploads/'.$plupload->getName()); }
Kdyby to nepomohlo, uveďte prosím celou implementaci.
Nakonec se mi to povedlo rozchodit na linuxovém serveru. Předtím to bylo pouštěné na lokálu. Takže funguje. :-)
Edit: Už to funguje i na widlích. Nevim kde byl přesně problém.
Editoval rohlizde (15. 8. 2013 10:34)
- echo
- Člen | 134
Vydal jsem novou verzi pro Nette 2.1, php 5.4 a Plupload 2.1. Více na githubu: https://github.com/…511/Plupload
- jiri.pudil
- Nette Blogger | 1029
V configu v sekci extensions
:
extensions:
plupload: Echo511\Plupload\DI\PluploadExtension