[addon multiplefileupload] MultipleFileUpload – form control
- Matúš Matula
- Člen | 257
honzakuchar napsal(a):
ked dumpnem $req->getHeader(„Content-type“) po odoslani formulara, tak na locale vypise daco taketo multipart/form-data; boundary=---------------------------281123069513169, na ostrom serveri je to NULL. Vie mi s tym, prosim, niekto poradit?
Tak to by mě také zajímalo. Zkus dumpnout všechny hlavičky, které se poslaly na server. Asi tam budu muset identifikovat ten požadavek nějak jinak.
Ako vidiet, tak v $_FILES odoslany subor je, ale v HttpRequeste uz nie. Pouzivam priklad z svn, su tam vsetky upravy, o kt. som sa docital v diskusii.
Ale nefunguje mi to ani bez JS. Zobrazi hlasku ako Ondrejovi ‚Musíte odeslat alespoň jeden soubor!‘ Uz som v tom uplne strateny..
$_FILES dump
array (
'Filedata' =>
array (
'name' => 'ATT00029.doc',
'type' => 'application/octet-stream',
'tmp_name' => '/sroot/temp/php1bzf5i',
'error' => 0,
'size' => 523264,
),
)
HttpRequest dump
HttpRequest::__set_state(array(
'query' => NULL,
'post' => NULL,
'files' => NULL,
'cookies' => NULL,
'uri' =>
UriScript::__set_state(array(
'scriptPath' => '/multipleFileUpload/document_root/',
'scheme' => 'http',
'user' => '',
'pass' => '',
'host' => 'ciki.gamepub.sk',
'port' => 80,
'path' => '/multipleFileUpload/document_root/',
'query' => 'do=form-submit',
'fragment' => '',
'frozen' => true,
)),
'originalUri' =>
Uri::__set_state(array(
'scheme' => 'http',
'user' => '',
'pass' => '',
'host' => 'ciki.gamepub.sk',
'port' => 80,
'path' => '/multipleFileUpload/document_root/',
'query' => 'do=form-submit',
'fragment' => '',
'frozen' => true,
)),
'headers' =>
array (
'accept' => 'text/*',
'cache-control' => 'no-cache',
'connection' => 'Keep-Alive',
'host' => 'ciki.gamepub.sk',
'user-agent' => 'Shockwave Flash',
),
'uriFilter' =>
array (
5 =>
array (
'#/{2,}#' => '/',
),
0 =>
array (
),
),
'encoding' => 'UTF-8',
))
- Honza Kuchař
- Člen | 1662
Už by mělo – výpadek serveru.
Ad. chybka: Mrknu na to, ale z hlavy fakt nevím. Nemohl by jsi mi dát, dočasně přístup na ten hosting? Chyby se strašně špatně hledají, jenom tak z placu.
- Honza Kuchař
- Člen | 1662
Ondřej Mirtes napsal(a):
Updatnul jsem – na localhostu to už jede, ale na serveru stále před reloadem stránky na konci uploadování blikne HTTP Error a pak to zahlásí, že musím nahrát aspoň jeden soubor :(
Už je to ready?
- Ondřej Mirtes
- Člen | 1536
Ty jo, už je to 4 měsíce a fakt nevím, jak jsem to tehdy vyřešil – nejspíš jsem to vzdal a je tam 5 obyčejných polí na soubor :)
Mimochodem, kolega mi tak před týdnem říkal, že i v tom tvém ofic. demu to dělá tu samou chybu, nebyl schopný to zprovoznit ani na localhostu.
- Honza Kuchař
- Člen | 1662
http://multiplefileupload.projekty.mujserver.net/ zkus tam něco poslat. Ale vím jen o 2 zásadních chybách, které působily porblémy:
- volání $this->terminate(); před $application->run(); → výjimka; tohle jsem, ale opravoval v jedné z prvních revizí
- ten povedený mod zápisu nebo čeno na linuxu; v kódu bylo chmod(777), ale musí tam být chmod(0777); jinak to dělá něco úplně jiného
Jinak ve funkčnosti, by to už mělo být použitelné. Ale pravda je, že ty první revize byly hodně boužlivé.
Teď mám jaksi 2 velké TODO na tomto doplňku:
- Udělat k tomu nějaký model – teď to používá Nette\Cache
- Předělat vzhled – nějak mi to pořád nesedí do formuláře
- Matúš Matula
- Člen | 257
honzakuchar napsal(a):
Ad. chybka: Mrknu na to, ale z hlavy fakt nevím. Nemohl by jsi mi dát, dočasně přístup na ten hosting? Chyby se strašně špatně hledají, jenom tak z placu.
mas to v mailu
- Honza Kuchař
- Člen | 1662
Matúš Matula napsal(a):
honzakuchar napsal(a):
Ad. chybka: Mrknu na to, ale z hlavy fakt nevím. Nemohl by jsi mi dát, dočasně přístup na ten hosting? Chyby se strašně špatně hledají, jenom tak z placu.
mas to v mailu
Hned jak si najdu chvilku, tak na to mrknu.
- Lopo
- Člen | 277
snazim sa rozbehnut tento addon, narazam vsak na problem s tymto riadkom:
$template->registerFilter('Nette\Templates\CurlyBracketsFilter::invoke');
vo funkciach createSectionWithoutJS a createSectionWithJS v MultipleFileUpload.php
ked tam tieto riadky su, padne mi to cele na deprecated statickom volani
invoke …
ked riadky vyhodim, tak vygenerovany kod nie je preparsovany
co s tym ?
Nette 0.9.3-dev 42e9ad2 released on 2010–01–23
addon z svn, build 22
- Honza Kuchař
- Člen | 1662
Když ho smažeš, tak to musí fungovat! Mrknu na to, hned jak se k tomu dostanu.
// EDIT: Nemám pravdu! :) To platí jen u Template vytvořených
Control::createTemplate()
.
Editoval honzakuchar (19. 2. 2010 19:41)
- Honza Kuchař
- Člen | 1662
Tak bug nalezený Matůšem Matulou opraven. Není to chyba MultipleFileUploaderu, ale Nette: https://forum.nette.org/…content-type.
// EDIT: Na tvém serveru máš funkční DEMO. Testovací účet můžeš ze svého serveru smazat. ;)
Editoval honzakuchar (19. 2. 2010 19:39)
- Honza Kuchař
- Člen | 1662
Lopo napsal(a):
snazim sa rozbehnut tento addon, narazam vsak na problem s tymto riadkom:
$template->registerFilter('Nette\Templates\CurlyBracketsFilter::invoke');
vo funkciach createSectionWithoutJS a createSectionWithJS v MultipleFileUpload.php
ked tam tieto riadky su, padne mi to cele na deprecated statickom volani invoke …
ked riadky vyhodim, tak vygenerovany kod nie je preparsovanyco s tym ?
Nette 0.9.3-dev 42e9ad2 released on 2010–01–23
addon z svn, build 22
Registrace LatteFilteru je kompletně předělaná. (kompatibilní s Nette 0.9.3) fixed
Editoval honzakuchar (19. 2. 2010 19:40)
- Matúš Matula
- Člen | 257
honzakuchar napsal(a):
// EDIT: Na tvém serveru máš funkční DEMO. Testovací účet můžeš ze svého serveru smazat. ;)
Vdaka za tvoj cas a namahu. Cenim si to ;-)
- Honza Kuchař
- Člen | 1662
Vdaka za tvoj cas a namahu. Cenim si to ;-)
Díky. Myslím, že k tomuto doplňku přidám tlačítko DONATE, protože už jsem na tom strávil opravdu hromadu času.
- Honza Kuchař
- Člen | 1662
Ahoj,
dnes jsem commitnul na SVN další verzi MFU. (obsahuje docela
velké změny)
Jsou odděleny modely od MFU (i když ještě ne uplně podle mých představ, ale jsou).
Měl by být Tread-safe. (i když se zdá, že občas není; prosím někoho thread-safe-zkušenějšího (->proto je více vláken raději pořád zakázáno), aby případně poradil) Na zamykání se používá vytvoření prázdného souboru v cache. (ano pořád se používá Cache, ale už je na SVN i driver přímo na FileSystém, ale je zatím nefuknční, zase – pokud máte někdo čas, mrkněte na to)
Zatím ještě nejsou hotové Interface pro modely (jsou prázdné). Dodělám hned po tom, co si ujasním, jak by přesně měly fungovat ty thead-safe modely. Pokud máte někdo představu, nápad nebo zkušenosti, prosím napište.
Opraven bug Uploadify, když je vybrán soubor, který má velikost
0bytů. Je přeskočen a je zavolán event emptyFile,
výchozí akce je alert()
.
Opraven bug, když je vybrán soubor větší, než dovoluje PHPko. Ještě před odesláním je soubor vyhozen fronty a je zavolán event sizeLimitExcessed, výchozí akce alert.
V příkladu je předělán Debug::dump() na tabulku.
V produkčním režimu příklad nepřesouvá soubory, ale rovou je maže. (když je příklad mimo localhost)
Přídán do distribuce Logger. Velmi usnadňuje ladění thread-safe operací.
Detekce prostřední podle IP počítače. (127.|::1 je DEVELOPMENT jinak PRODUCTION)
Automatické nastavení optimálních hodnot lifeTime a cleanInterval.
Snad jsem nezapomněl na žádné důležité změny.
//EDIT: pokud někdo chcete vědět, jak zaregistrovat vlastní model, tak napište. Je to jednoduché, ale nechce se mi to psát, pokud to nikdo nepoužije. ;)
Editoval honzakuchar (21. 2. 2010 12:42)
- Honza Kuchař
- Člen | 1662
Tak dnes další commit:
- mírná změna API
- staré modely smazány
- nové modely: LogModel a SQLiteModel
- LogModel → zapisuje do souboru volané metody → něco jako DummyStorage
- SQLiteModel → ano to je model, který zapisuje do SQLite.
Je to první verze s tímto driverem. Prosím ŘÁDNĚ
otestovat. Podle toho, že SQLite by mělo být
thread-safe, tak by měl být konečně thread-safe i MultipleFileUploader
- Je možné, že to thread-safe nebude. Nepodařilo se mi totiž udělat zamykání tabulky. Nejspíš za to může sqlite2. Docela uvažuji o předělání na Dibi, popřípadě udělat další sriver, protože při odeslání 800 souborů ma SQLite DB skoro 1MB
- V cleanupu volá vacuum → zmenšení souboru databáze.
- Přidány BaseModely → usnadnění vytváření vlastních modelů (implementace asi osmi metod)
Editoval honzakuchar (23. 2. 2010 22:56)
- Honza Kuchař
- Člen | 1662
Co je potřeba udělat (spíš co musíte udělat):
- Otestovat SQLite model (výchozí), zda je opravdu thread safe. Prostě se budete pokoušet odesílat hromady souborů a budete sledovat, zda dorazí všechny. Prostě otestovat, jestli se v něm nevyskytuje nějaká zásadní krpa.
- 6.3.2010:
Hotovo
Zda běží vše tak jak má na Linuxu (nemám server na Linuxu)
Potřeboval bych, aby se to stihlo oboje do 12.3.2010! Díky!
Editoval honzakuchar (6. 3. 2010 22:47)
- Honza Kuchař
- Člen | 1662
norbe napsal(a):
Pokud mas windows tak doporučuju TortoiseSVN.
Také doporučuji. (používám taky)
- Panda
- Člen | 569
Zatím se mi zdá, že na linuxu to moc nefunguje. Tváří se to sice, že
je všechno OK, ale „cesta k souboru“ ukazuje do složky
app/temp/uploads-MFU
(místo do app/uploadedData
),
která je ale prázdná. Zkusím to ještě o volné chvilce trochu projít a
podívat se, co by mohlo způsobovat potíže.
- Honza Kuchař
- Člen | 1662
Mělo by to složku vytvořit v módu 0777. A pokud přesto není zapisovatelná, tak to zapisuje přímo do temp. (alespoň doufám)
//EDIT: By mělo. Nevím, jestli jsem to testoval.
Editoval honzakuchar (5. 3. 2010 17:14)
- Honza Kuchař
- Člen | 1662
Panda napsal(a):
Zatím se mi zdá, že na linuxu to moc nefunguje. Tváří se to sice, že je všechno OK, ale „cesta k souboru“ ukazuje do složky
app/temp/uploads-MFU
(místo doapp/uploadedData
), která je ale prázdná. Zkusím to ještě o volné chvilce trochu projít a podívat se, co by mohlo způsobovat potíže.
Teď si to čtu znova. Na produkčním prostředí příklad soubory nikam
nepřesouvá. (zůstanou v tempech a potom se smažou) Když zavoláš metodu
move() nad HttpUploadedFile
, tak by se ti to mělo přesunout tam,
kam potřebuješ.
- Vitek Jezek
- hledá kolegy | 285
uz jsem to sem chtel napsat pred dlooouhou dobou, ale nejak jsem se k tomu
nedostal O: )
Prvni vec je, jaky ten HTTP error nam to vraci – me osobne 403. Pak byl jen
krucek se zeptat googlu a zjistit, ze to radsi neservirovat fastCGI.
Takze hodit to na mod_php, zajistit dobre prava a dobre slozky a voilà: run
Forrest, run! : )
Honzo, hodne bych zauvazoval, zda to nepredelat na http://swfupload.org/, vypada to o neco inteligentneji.
- Honza Kuchař
- Člen | 1662
uz jsem to sem chtel napsat pred dlooouhou dobou, ale nejak jsem se k tomu nedostal O: ) Prvni vec je, jaky ten HTTP error nam to vraci – me osobne 403. Pak byl jen krucek se zeptat googlu a zjistit, ze to radsi neservirovat fastCGI. Takze hodit to na mod_php, zajistit dobre prava a dobre slozky a voilà: run Forrest, run! : )
Toto by mělo fungovat už správně. Je to opraveno na dvou místech
zároveň. :) Nette:
https://github.com/…e84a260119db
a přímo v MFU v metodě handleUploads()
. Pokud to pořád nefunguje pod
FastCgi, tak mi prosím na mail pošli přístup na FTPko do nějaké složky
toho serveru. Ale co jsem testoval na serveru Matúše Matuly, tak nebyl
problém. Po opravě vše fungovalo normálně. (oprava je už jak distribuci
Nette, tak v distribuci MFU)
Honzo, hodne bych zauvazoval, zda to nepredelat na http://swfupload.org/, vypada to o neco inteligentneji.
To co jsem řešil byly problémy Flash x Session. (které už jsou teď vyřešené; jak v Nette – zrušení verificationKey; tak v MFU – nepoužívá SESSION → velký problém napsat thread-safe storage → nakonec použito sqlite: 1, 2) Ale klidně to může komunikovat s něčím jiným, než s Uploadify. Plánuji udělat do MFU jaké drivery pro jednotlivé uploadovací mechanismy. Od standardního uploadu, přes Uploadify, až po Google Gears (drag&drop). Ale to je asi daleká budoucnost. To až zase budu mít někdy trochu času. (EDIT: … nebo mi někdo zaplatí)
Nicméně mě těší, že práce nepřišla nazmar. Byla to práce opravdu hnusná. Hlavně vyřešit ty chyby v Internet Exploreru.
Editoval honzakuchar (5. 3. 2010 23:22)
- Honza Kuchař
- Člen | 1662
P.S.: Nenapadá někoho nějaké lepší jméno pro MultipleFileUploader? Připadá mi to hrozně dlouhé.
- Panda
- Člen | 569
honzakuchar napsal(a):
Teď si to čtu znova. Na produkčním prostředí příklad soubory nikam nepřesouvá. (zůstanou v tempech a potom se smažou) Když zavoláš metodu move() nad
HttpUploadedFile
, tak by se ti to mělo přesunout tam, kam potřebuješ.
Testuji to na té ukázce, co je v SVNku. A vážně se to chová jinak mě na Windowsáckém lokálu, a jinak na produkčním serveru, který jede na gentoo.
//Doplnění: tak teď jsem si to taky přečetl znova a už chápu. Po odstranění podmínky to přesouvá, takže to, zdá se, funguje bez problémů.
Editoval Panda (6. 3. 2010 9:23)
- Honza Kuchař
- Člen | 1662
Neuvědomil jsem si, že to někoho zmate. Asi to odstraním. Mám to tam kvůli ukázce co mám na serveru, kde to nechci nikam přesouvat.
- Blizzy
- Člen | 149
Mám dotaz, okolo JavaScriptu a Flashe se moc nevyznám, ale:
Je nutné, aby to tlačítko Procházet bylo
flashové? Nemohl by to být normální <button>
,
který pomocí JavaScriptu interaguje s Flashem? Flash a JavaScript přece
mohou komunikovat, viz: http://www.permadi.com/…shjscommand/. Pokud by byl jako
button, nevyčníval by a vypadal by jak ostatní tlačítka, dalo by se to
nastylovat apod. Proč tohle není možné?
- Honza Kuchař
- Člen | 1662
Technicky to možné není. Je tam pokud vím nějaké omezení. (pokud se má otevřít dialog na vybrání souboru, musí být vyvolán kliknutím uživatele do objektu s flashem) Ale je v plánu udělat ten flash jakoby průhledný a pod ním, by byl nějaký div, který si už ostyluješ. (bude možná někdy)
Editoval honzakuchar (6. 3. 2010 22:51)
- Mortaelth
- Člen | 24
Nemohu se pripojit k SVN. Pres browser (opera) kdyz kliknu na odkaz svn, tak si mohu repozitar normalne prohlednout, ale kdyz si url zkopiruji a zkusim pouzit v TortoisSVN nebo v internim SVN klientovi Zend Studia, tak to po me chce prihlasovaci udaje. Je nekde neco potreba nastavit? delam neco spatne?
- Matúš Matula
- Člen | 257
Mortaelth napsal(a):
Nemohu se pripojit k SVN. Pres browser (opera) kdyz kliknu na odkaz svn, tak si mohu repozitar normalne prohlednout, ale kdyz si url zkopiruji a zkusim pouzit v TortoisSVN nebo v internim SVN klientovi Zend Studia, tak to po me chce prihlasovaci udaje. Je nekde neco potreba nastavit? delam neco spatne?
Skus dat ako meno ‚guest‘ a heslo nechaj prazdne
- Mortaelth
- Člen | 24
Matúš Matula napsal(a):
Mortaelth napsal(a):
Nemohu se pripojit k SVN. Pres browser (opera) kdyz kliknu na odkaz svn, tak si mohu repozitar normalne prohlednout, ale kdyz si url zkopiruji a zkusim pouzit v TortoisSVN nebo v internim SVN klientovi Zend Studia, tak to po me chce prihlasovaci udaje. Je nekde neco potreba nastavit? delam neco spatne?
Skus dat ako meno ‚guest‘ a heslo nechaj prazdne
To jsem zkousel jako prvni. Neuspesne. Nerikejte ze jsem jediny, po kom to chce heslo?
- Honza Kuchař
- Člen | 1662
Mortaelth napsal(a):
Matúš Matula napsal(a):
Mortaelth napsal(a):
Nemohu se pripojit k SVN. Pres browser (opera) kdyz kliknu na odkaz svn, tak si mohu repozitar normalne prohlednout, ale kdyz si url zkopiruji a zkusim pouzit v TortoisSVN nebo v internim SVN klientovi Zend Studia, tak to po me chce prihlasovaci udaje. Je nekde neco potreba nastavit? delam neco spatne?
Skus dat ako meno ‚guest‘ a heslo nechaj prazdne
To jsem zkousel jako prvni. Neuspesne. Nerikejte ze jsem jediny, po kom to chce heslo?
Heslo to chce po vsech. Je tam opravdu nastaveno:
jméno: guest
heslo: prázdné
Akorát to heslo je zakódováno v url. Takže se to ve většině prohlížečů zadá samo.
Editoval honzakuchar (15. 3. 2010 21:30)
- Honza Kuchař
- Člen | 1662
Shledáváte MFU dostatečně otestovaným na to, aby se dostal do fáze beta či release candidate. (RC ještě asi ne, ještě tam chci přidat možnost skinování)
Editoval honzakuchar (15. 3. 2010 21:32)
- Honza Kuchař
- Člen | 1662
Tokeny se používájí jen k identifikaci front. (nikoli k ověřování; ale je to pár řádků navíc, takže si to můžeš klidně doimplementovat) Funguje to stejně jako v PHP. Uložím do tempů a potom po timeoutu mažu.
- Honza Kuchař
- Člen | 1662
Důrazně doporučuji updatovat na nejnovější revizi. V MFU se vyskytoval dost nepříjemný bug. MFU občas (cca. jednou za sto požadavků) vyhazoval výjimku o neexistující tabulce. V současné revizi je toto již opraveno je zapracováno opatření, aby se již takováto chyba neopakovala.
Dále byl do MFU přidán driver pro Dibi. (přiložené jsou dumpy mysql a postgre databáze)
Editoval honzakuchar (21. 3. 2010 23:19)
- Honza Kuchař
- Člen | 1662
Vzhledem k tomu, že už má MFU 3 drivery, zdokumentoval jsem tuto funkčnost i v dokumentaci.
- Vyki
- Člen | 388
Nevím proč, ale když uploaduju více jak 2 soubory, tak upload sice proběhne, ale odezvou je hláška, že 2 soubory byly nahrány. Chová se to jako kdyby se to u dvou souborů ořízlo. Ani v upload složce najdu vždy jenom 2. Zkoušel jsem i mysql driver, ale na produkčním serveru pořád nic. Prosím o radu. Díky EDIT: Ještě doplňuji, že se jedná o server, kde běží PHP 5.3.2, a používám příklad uvedený na SVN. EDIT: Dále jsem zjistil, že na dvou souborech končí Firefox. Na 4 až 5ti souborech končí i IE8. Vyberu 8 souborů velkých cca 800kB. Maximální velikost POST požadavku mám 30MB a maximální velikost odesílaných souborů také 30MB. MFU $Rev: 49 $ released on $Date: 2010–03–21 22:16:14 +0100 (Ne, 21 III 2010) $
Editoval Vyki (23. 3. 2010 13:30)
- Vyki
- Člen | 388
Tak další poznatek. Když dám simUploadFiles = 1, tak to pomůže v IE8, ale ve Firefoxu se to změní jedině tak, že se sice z vizuálního hlediska proběhne proces uploadu, ale ve skutečnosti se nahraje na server pouze 1 soubor, předtím byly alespoň 2 :o) A stejně jako ve Firefoxu to je i v Chrome.
- Honza Kuchař
- Člen | 1662
Zajímavé, mně se tu nahrají všechny jak mají.
Editoval honzakuchar (23. 3. 2010 15:48)