[addon multiplefileupload] MultipleFileUpload – form control
- orech
- Člen | 40
Ešte ma napadla jedna otázka. Dá sa nastaviť, aby sa povolil len výber
jednoho súboru?
V JS by malo byť niečo ako multi_selection:false
.
Edit: Nastaviť myslím, ako nastaviť pri vytváraní komponenty, nie priamo v JS – potrebujem to len pre jeden Presenter.
Editoval orech (23. 11. 2012 11:14)
- Matúš Matula
- Člen | 257
pri vytvarani komponenty vies nastavit max. pocet suborov, kt. mfu spracuje, ale mal by si rovnako obmedzit ich pocet aj v JS, inak to bude velke WTF :-)
<?php
$form->addMultipleFileUpload('file_upload', 'Testík', 1); // 1 subor
?>
- orech
- Člen | 40
Aha, som si myslel, že keď tam mám 20, tak to je 20 MB ako
max_file_size
parameter.
V tom JS (initJS.js) to neviem nájsť. Lebo nechcem mať napevno, že len
jeden súbor.
EDIT2: initJS.js, pridal som:
{if ($maxFiles == 1)}
multi_selection:false,
{/if}
EDIT: Keď som skúšal demo uploadera, tak mi išlo pridávať súbory cez tlačítko. Teraz mi ide pridať len pomocou Drag 'n Drop. Keď kliknem na tlačítko Pridať súbory, tak sa mi otvorí okno, kde vyberiem súbory, dám OK a no žiaden sa neobjaví v uploaderi. Robí to pri HTML5, pri flashom to ide v poriadku.
EDIT 3: Chybu robil JS live-form-validation. Bolo treba vyhodiť upload form z validovania (riadok, cca 524):
Nette.addEvent(window, 'load', function () {
for (var i = 0; i < document.forms.length; i++) {
if (document.forms[i].getAttribute('id') != 'frm-uploadForm') {
Nette.initForm(document.forms[i]);
}
}
});
Editoval orech (27. 11. 2012 10:10)
- duskohu
- Člen | 778
Caute, viete mi poradit aky mozem mat problem ked mi vracia komponenta:
Call to undefined method Nette\Application\UI\Form::addMultipleFileUpload().
proste mi ju nezaregistruje, uz fakt neviem preco, pritom mam v bootstrap:
MultipleFileUpload::register();
verzia addonu: Verze z 27. 8 2011 od Kashpi pro Nette 2.x pro PHP 5.3
nette: 2.1-dev
Editoval duskohu (18. 12. 2012 16:44)
- Matúš Matula
- Člen | 257
mozno chyba v NS, menil som tam viacero veci, kt. si uz nepamatam :) .. skus pouzit moju upravenu verziu, mala by fungovat
- duskohu
- Člen | 778
Tak som skusil tu upravenu verziu: https://github.com/Ciki/MFU ale stale nic, proste v bootstrap ked zaregistrujem pomocou:
MultipleFileUpload::register();
tak to urobi, lebo nevrati ziadnu chybu, ale ked to pouzijem uz na:
$form = new Form;
$form->addMultipleFileUpload("upload","Balíček souborů");
tak mi da:
Call to undefined method Nette\Application\UI\Form::addMultipleFileUpload()
proste sa to nezaregistruje. Nakopiroval som:
- z WWW_DIR/modules/multipleFileUpload >> do mojho WWW_DIR a dalsie potrebne js, css
- app/components/MultipleFileUpload >> do mojho components
- do head som dal : {!=MultipleFileUpload::getHead()}
- do bootstrap >> MultipleFileUpload::register();
Urobil som nieco zle?
- jetpack
- Člen | 71
No já poradím jak to mám já:
Máme normálně staženou celou knihovnu (MultiFileUpload, swfupload,
uploadify)
V bootstrap.php:
<?php
$configurator->addConfig(__DIR__ . '/config/config.neon');
$container = $configurator->createContainer();
// Kde máš umístěný ten register ty?
MultipleFileUpload::register();
MultipleFileUpload::getUIRegistrator()
->clear()
->register("MFUUIHTML4SingleUpload")
->register("MFUUISWFUpload");
MultipleFileUpload::setQueuesModel(new MFUQueuesDibi()); // Spojeno s MySQL připojením na queue
?>
taktéž mám v head:
{!=MultipleFileUpload::getHead()}
na $formu mám:
<?php
$form = new Nette\Application\UI\Form;
$form->addMultipleFileUpload("files","Soubory",20);
?>
Máš tam nalinkované soubory? :
<script src=„{$basePath}/js/jquery.livequery.js“></script>
<script src=„{$basePath}/js/nette-ajax-driver.js“></script>
<script src=„{$basePath}/js/nette-ajax-form.js“></script>
- duskohu
- Člen | 778
MultipleFileUpload::getUIRegistrator();
Mam hned za $container->addService('router', $router);
ked som ho dal pred tak mi vratilo:
Service 'router' has already been registered.
nalinkovane subory mam tiez, aj keby nie tak je to jedno na tych teraz nezalezi, kedze mi vracia ze nevie najst metodu v Form, takze ju ani nezaregistruje, co je divne ze pri registracii mi neda ani error, takze ako by ju zaregistrovalo, ale nieje tam.
Call to undefined method Nette\Application\UI\Form::addMultipleFileUpload().
- jetpack
- Člen | 71
No já to mám stažené odsud:
https://componette.org/search/?…
to jsem přidal do Libs a
<?php
MultipleFileUpload::getUIRegistrator()
->clear()
->register("MFUUIHTML4SingleUpload")
->register("MFUUISWFUpload");
?>
mám za
<?php
$container = $configurator->createContainer();
?>
- Matúš Matula
- Člen | 257
Tak som ti to rozbehal aj na 2.1dev .. staci tato mala uprava https://github.com/…d9e44be3964a
- duskohu
- Člen | 778
caute viete mi poradit, ako nastavim validaciu na prvok? Lebo nastavenie mime type mi nefunguje.
$form->addMultipleFileUpload("upload2", "Druhý balíček souborů")
->addRule(MultipleFileUpload::validateMimeType, 'Povolene je len zip', '
application/x-zip,
application/zip,
application/x-zip-compressed,
application/octet-stream');
vrati mi to:
Undefined class constant 'validateMimeType'
- enumag
- Člen | 2118
Pač to neni jako konstanta, musel bys to tam dát jako callback… Ale nemá to smysl, ani tak by to nefungovalo. ;-)
- duskohu
- Člen | 778
Vsimol som si ze ked chcem uploadnut zip subor tak mi vypise alert Invalid file type. a v html kode mam: accept=„image/jpeg,image/gif,image/png“, ako viem toto zmenit? lebo som hladal a nic som nenasiel, ziadnu konfiguraciu. Popripade aj velkost max file size pre 1 subor? Vie mi niekto poradit? pls.
<input
id="p17fu3q4vk1u05vi21jr1s478s30_html5"
style="font-size: 999px; position: absolute; width: 100%; height: 100%;"
type="file"
accept="image/jpeg,image/gif,image/png"
multiple="multiple">
Editoval duskohu (2. 1. 2013 18:49)
- Matúš Matula
- Člen | 257
skus pozriet js konfiguraciu pouzivaneho interface, napr. pre plupload tu https://github.com/…ad/initJS.js#L23
- dada-amater
- Bronze Partner | 52
duskohu napsal(a):
Pouzivate niekto https://componette.org/search/?… miesto netteForms.js?
Používám to bez problému, nijak se to s MFU nemlátí.
- dada-amater
- Bronze Partner | 52
Strávil jsem pár dní s vrtáním se v MFU, konkrétně jeho verzí pro nette 2.0.x z GITu. Narazil jsem na pár bugů:
- SQLite3 není u mě funkční (PHP 5.3.21), při ukládání se
Sqlite3::escapeString(serialize($file))
spolehlivě ořízne na znaku \x00, řešení je stejné jako u tohoto problému . - Co mi dalo zabrat byl problém nefunkčnosti v Google Chrome (verze 24.0.1312.57). V podstatě nefunguje vše, co používá flash, já se snažil rozběhnout uploadify. FF bězí, Opera běží. Problém byl zde:
<?php
class MFUUIUploadify extends MFUUIBase {
public function isThisYourUpload() {
return (
\Nette\Environment::getHttpRequest()->getHeader('user-agent') === 'Shockwave Flash'
AND isSet($_POST["sender"])
AND $_POST["sender"] == "MFU-Uploadify"
);
}
...
}
?>
Chrome neposílá user-agent ‚Shockwave Flash‘, ale klasický (Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17), protože má flash integrovaný přímo.
Jinak moc děkuju všem co jsem na tomto pluginu podíleli, usnadní to ostatním spoustu práce.
Editoval dada-amater (1. 3. 2013 14:26)
- Matúš Matula
- Člen | 257
Ahoj, dik za report.
O tom bugu s escapovanim riadiacich znakov som vedel aj ho fixol, akurat som
to pozabudol na 1 mieste opravit, teraz by to malo fungovat.
Detekciu interface s flashom som upravil. Aktualna verzia je na githube.
Edit: ta chyba zrejme pretrvava pre SQLite (SQLite3 funkcne), ale nemam ju na serveri a teda ako otestovat.
Editoval Matúš Matula (20. 2. 2013 21:19)
- Honza Kuchař
- Člen | 1662
Oznamuji, že doplněk je nově dostupný na githubu. SVN repozitář je zatím pořád funkční, vyvíjet se však bude v GITu.
Těším se na pull requesty, forky a všechny další vymoženosti, které GIT přináší.
Používáte-li svn:externals, tento článek je určený pro vás.
(V případě, že bych dělal něco proti GIT-best-practices, prosím upozorněte mě na to, jsem GIT-zelenáč)
- koren
- Člen | 59
Ahoj.
Už se to tu určitě někdy nakouslo, ale neměli byste prosím zprovozněnou
nějakou lightweight verzi MultipleFileUploadu pro Nette 2 s NDB? Zkoušel
jsem se zorientovat v tomto balíku https://github.com/Ciki/MFU a pokusil se
přepsat si model, ale přijde mi, že je tam spoustu věcí navíc, a to mi
(jakožto ne uplně advanced vývojáři) bohužel brání tomu zcela porozumět
a rozběhnout. Takže hledám nějaký takový sandbox s touto komponentou,
něco takového přehledného jako je verze pro MFU Nette 0.9.
Pokud by někdo něco takového měl, bylo by to vážně super a určitě by
to pomohlo i spoustě dalším lidem.
Díky moc.
- Matúš Matula
- Člen | 257
Ahoj, pozri na https://github.com/…FU/downloads,
je tam starsi .zip len potrebnych suborov pre MFU.. podla nich vies, kt. subory
su ozaj nevyhnutne pre MFU a mozes ich z toho balastu naokolo vytiahnut a zacat
sa hrat :-) V podstate je ale vsetko potrebne v README.
S NDB nerobim, takze v tomto smere nepomozem.
Keby som mal niekedy cas, tak skusim ten balast z toho repa odstranit ;-)
- Honza Kuchař
- Člen | 1662
Na oficiální verzi pro Nette 2.0 pracuji (nebo spíš pracujeme; učím se s GITem). Budou se slučovat již napsané kódy a vznikne MFU pro Nette 2.0. Zatím postupuj podle závislostí… https://componette.org/search/?… tj. pokračuj s verzí Matúše na githubu. ;-)
- dada-amater
- Bronze Partner | 52
Muzu poprosit o podporu pro Composer? Snazim se ho pouzit pro muj projekt a tohle by bodlo. Je to paradni vec. Je to hotovy za par minutek.
- Honza Kuchař
- Člen | 1662
Založil jsem na Githubu větev pro Nette 2.0. Jedná se o kód ve velmi rané fázi, tedy není pořádně otestovaný. Snažím se postupně začleňovat commity od Cikiho do větve pro Nette 2.0.
Budu rád za jakékoli připomínky i případné pull requesty.
Co je teď v plánu:
- composer
- lepší organizace souborů ve složce www
- opravdu mít MFU ve složce components v appDir?
- přidání ovladače pro SQLite 3 (Ciki již napsal, zbývá jen začlenit do repa)
- vymyslet lepší způsob konfigurace celé komponenty? (vlákno: https://github.com/…cb995a141f76)
- voda
- Člen | 561
- lepší organizace souborů ve složce www
- opravdu mít MFU ve složce components v appDir?
Ahoj, já bych nejraději organizaci souborů viděl takto:
app/components/MultipleFileUpload
bych přesunul do složky src (a nejlépe podle PSR0)- pokud jsou ve
www
pouze externí závislosti, tak odstranit - složky
app
,libs
,log
,… odstranit
- Honza Kuchař
- Člen | 1662
app/components/MultipleFileUpload bych přesunul do složky src (a nejlépe podle PSR0)
Asi jsem nechápavý, kde by ta složka podle tebe měla být? V libs? PSR0 zatím asi nepřipadá moc v úvahu, když MFU (zatím!!) nepoužívá namespaces…
pokud jsou ve www pouze externí závislosti, tak odstranit
Tady nerozumím vůbec – jaké externí závislosti? Jsou tam soubory, které jsou od jednotlivých interface MFU (uploadify, plupload, …)
složky app, libs, log,… odstranit
To repo slouží zároveň jako příklad – to už teď není v módě? Je fajn, že se to vyvíjí společně…
- voda
- Člen | 561
Navrhuji jen to, aby v repositáři byly soubory, které patří k MFU.
To repo slouží zároveň jako příklad – to už teď není v módě?
To doufám nebylo nikdy v módě. Důvody proč to tam podle mne nepatří:
- Velikost. Teď má naklonovaný repositář přes 5MB, pokud budu ve svém projektu používat 10 doplňků a s každým se mi bude stahovat Nette, dibi, adminer, …, tak z toho nebudu nadšen.
- Log. Pokud se podívám např. na commit 79c5ba, tak z logu vůbec nepoznám co měnilo. Jestli to je jen nakopírovaná knihovna, nebo jestli tam byly i nějaké úpravy kvůli kompatibilitě, …
Pokud chceš poskytovat i funkční demo, tak bych pro něj udělal vlastní repo, podobně jako má Nette sandbox.
- Honza Kuchař
- Člen | 1662
Oddělit MFU a příklad je určitě rozumné…
Však nedovedu si dost dobře představit oddělovat zdrojáky například pluploadu a interface plupload v MFU. Ono to musí držet veze pohromadě…
Taky by bylo fajn, aby si člověk mohl už při includování repa do svého projektu nějak vybrat, které interfaces tam chce a které modely tam chce. Vzhledem k tomu, že nejsem git-geek, tak mě žádné řešení nenapadá… Však vypadá to, že by tím vzniklo 4 repa pro interfaces + 4 repa pro modely + repo pro MFU; přijde mi to jako dělo na komára… Nebo myslíš, že je to rozumné? Vzhledem k množství repozitářů by bylo asi nejlepší založit organizaci, jak to má Nette… A vyzná se v tom potom někdo?
Má smysl u doplňku opravdu takováto struktura repozitářů?
- MultipleFileUpload: Example application
- MultipleFileUpload
- MultipleFileUpload: Model: SQLite
- MultipleFileUpload: Model: SQLite3
- MultipleFileUpload: Model: Dibi
- MultipleFileUpload: Model: Log
- MultipleFileUpload: Interface: SwfUpload
- MultipleFileUpload: Interface: Uploadify
- MultipleFileUpload: Interface: Plupload
- MultipleFileUpload: Interface: HTML4SingleUpload
- MultipleFileUpload
- hrach
- Člen | 1838
Jako clovek, ktery tento doplnek nepouziva a ani moc neplanuju, zkusim napsat muj nazor k architekture.
Zkracene: Architektura je uplne spatne. :D
Dlouze: Doplnek pro upload by vubec nemel resit databazovou vrstvu. Tecka. Cele bych to vyhazel. Jestli to dobre chapu, je to jen backend pro samotnou komponentu. Urcite to nejde udelat bez toho? Ja plupload takto uspesne provozuju bez problemu (vcetne chunkovani), jako standardni form prvek. Tim se ti dost snizi pocet nutnych repozitaru, cela komponenta se krasne procisti a hlavne, bude delat to, co se po ni zada (chcu upload, proc bych kvuli tomu mel mit db?). Dale bych zalozil organizaci. Jednotlive interface jsou jednotliva repa. Dale take repo demo (tzn. oddelit). A hlavne, interface pro html4 bych dal nativne do zakladniho balicku + dulezite info, nikde jsem nenasel, pridal bych do nativniho balicku interface pro html5. Toz se ti repa docela zjednodussi:
- mfu/mfu
- mfu/plupload
- mfu/uploadify
- mfu/swfupload
- mfu/demo
- voda
- Člen | 561
Však nedovedu si dost dobře představit oddělovat zdrojáky například pluploadu a interface plupload v MFU. Ono to musí držet veze pohromadě…
Proč, kvůli různým verzím? Pokud napíšeš někam do poznámky s jakou verzí pluploadu to funguje (s jakou verzí to je testováno), tak není potřeba tam mít přímo soubory pluploadu.
Však vypadá to, že by tím vzniklo 4 repa pro interfaces + 4 repa pro modely + repo pro MFU
To by bylo asi „správné“ řešení, ale bylo by s tím už zbytečně moc práce, takže bych to klidně nechal v jednom repositáři.
- Honza Kuchař
- Člen | 1662
Hrachu, není to pravda, každá architektura má nějaký důvod a určitě není správně ji shazovat, jen proto, že ten důvod neznáš. Myslíš, že jsem se tak rozepisoval jen tak z plezíru?
MFU řeší problém, když potřebuješ odesílat data například v administraci. Jsi-li autentizován máš svoji session. Problém je v tom, že upload neprovádí vždy prohlížeč, ale například flash. Ten si posílá cookies jaké chce a nedá se na to spolehnout. MFU tedy musí chytat data ještě před startem session, jinak by jsi byl odhlášen. A k tomu potřebuje nějak uložit identifikační tokeny a k nim přiřazené soubory.
Úplně původně MFU využívalo cache Nette. Problém je v tom, že toto použití je chybné. Do cache smíš ukládat jen to, co jsi schopen kdykoli znovu vypočítat. Což tu neplatí.
Potom využívalo přímý přístup do adresáře cache, kde si dělalo vlastní soubory, což bylo úplně zcestné. A navíc tu byl problém s atomicitou při vícevláknovém odesílání. Občas se něco ztratilo. (což se s cache dělo taky)
Potom vznikla myšlenka driverů, že si bude moci každý uložit tyto metadata kam chce. A to je důvod.
Chtělo by to nějak zpřehlednit API, aby si to byl každý schopen jednoduše přepsat pro svoje modely. Však je tam ten striktní požadavek na atomicitu a to se ukázalo jako největší překážka.
Najednou to nesmysl není. Drivery jsou opodstatněné.
@voda:
- Verze knihoven. Chtěl jsem, aby to fungovalo prostě po stažení repozitáře.
- Zatím bych to rozdělil na dva. Example a MFU. Nad těmi dalšími ještě popřemýšlím.
- hrach
- Člen | 1838
Honza Kuchař napsal(a):
každá architektura má nějaký důvod
že má něco nějaký důvod ještě neznamá, že je to správně
Myslíš, že jsem se tak rozepisoval jen tak z plezíru?
To stejné platí o mém postu ;)
MFU řeší problém, když potřebuješ odesílat data například v administraci.
Je jedno. Jde prostě o to, že máš session. Tu můžeš mít a ani nebudeš přihlášen.
Problém je v tom, že upload neprovádí vždy prohlížeč, ale například flash. Ten si posílá cookies jaké chce a nedá se na to spolehnout. MFU tedy musí chytat data ještě před startem session, jinak by jsi byl odhlášen. A k tomu potřebuje nějak uložit identifikační tokeny a k nim přiřazené soubory.
Jasný, ale to vůbec nesouvisí s tím, že to ukládáš do db.
Úplně původně MFU využívalo cache Nette. Problém je v tom, že toto použití je chybné. Do cache smíš ukládat jen to, co jsi schopen kdykoli znovu vypočítat. Což tu neplatí.
souhlas.
Potom využívalo přímý přístup do adresáře cache, kde si dělalo vlastní soubory, což bylo úplně zcestné. A navíc tu byl problém s atomicitou při vícevláknovém odesílání. Občas se něco ztratilo. (což se s cache dělo taky)
Do adresáře cache je to zcestné, patří to do adresáře temp. Ohledne vicevlaknoveho odesilani – nenasel jsem zadnou zminku o tom, ze by nejaky interface umel odesilat vice chunku zaraz. Pokud je to mysleno ve smyslu, ze mam vice komponent na strance, nevidim v tom problem. Z meho pohledu je disk stejne bezpecne uloziste jako db (ktera je konec koncu taky na disku).
Navic, ohanis se atomicitou a pritom kdyz se podivam na dibi driver vubec nechapu tuto cast kodu:
Dibi::begin();
$where = array(
"queueID%s" => $this->getQueueID(),
"name%s" => $name
);
$this->query('UPDATE files SET ',array("chunk"=>$chunk),'WHERE %and',$where);
if($file) {
$this->query('UPDATE files SET ',array("data"=>base64_encode(serialize($file))),'WHERE %and',$where);
// workaround: https://forum.dibiphp.com/cs/1003-pgsql-a-znak-x00-oriznuti-zbytku-vstupu
}
Dibi::commit();
Vzdyz to jde takto i bez transakci
$where = array(
'queueID%s' => $this->getQueueID(),
'name%s' => $name,
);
$update = array(
'chunk' => $chunk,
);
if ($file) {
$update['data'] = base64_encode(serialize($file));
}
$this->query('UPDATE files SET ', $update, 'WHERE %and', $where);
Fakt netusim, jestli mi neco unika, nebo te tu budu skolit z pouzivani dibi.
- Honza Kuchař
- Člen | 1662
že má něco nějaký důvod ještě neznamá, že je to správně
Pořád lepší řešení nevidím…
Myslíš, že jsem se tak rozepisoval jen tak z plezíru?
To stejné platí o mém postu ;)
Dobrý smeč! :-)
Je jedno. Jde prostě o to, že máš session. Tu můžeš mít a ani nebudeš přihlášen.
Právě. Tu session to poruší, proto je třeba předávat vlastní token a session simulovat pomocí něj ještě před tím, než se session zavede a potom skončit.
Jasný, ale to vůbec nesouvisí s tím, že to ukládáš do db.
Výchozí je SQLite, je v tom problém? Cache v nette taky užívá sqlite jako svůj index. Výhoda je, že je to rychlé a jednoduché na implementaci…
Do adresáře cache je to zcestné, patří to do adresáře temp.
S adresářem cache jsem se spletl. Myslel jsem temp.
Ohledne vicevlaknoveho odesilani – nenasel jsem zadnou zminku o tom, ze by nejaky interface umel odesilat vice chunku zaraz. Pokud je to mysleno ve smyslu, ze mam vice komponent na strance, nevidim v tom problem. Z meho pohledu je disk stejne bezpecne uloziste jako db (ktera je konec koncu taky na disku).
Nene, více chunků ne, ale umí posílat více souborů zároveň.
Navic, ohanis se atomicitou a pritom kdyz se podivam na dibi driver vubec nechapu tuto cast kodu:
…
Fakt netusim, jestli mi neco unika, nebo te tu budu skolit z pouzivani dibi.
Díky za upozornění. Chce to refactoring. Driver jsem nepsal já a byl psán analogicky v sqlite driveru… Tedy nevyužívá všech pěkných vlastností dibi. Než vyjde oficiální verze pro Nette 2.0, projdu to.
- hrach
- Člen | 1838
Honza Kuchař napsal(a):
Jasný, ale to vůbec nesouvisí s tím, že to ukládáš do db.
Výchozí je SQLite, je v tom problém? Cache v nette taky užívá sqlite jako svůj index. Výhoda je, že je to rychlé a jednoduché na implementaci…
Už hodně dlouho ne, FileJournal je B(+?) strom.
Je jedno. Jde prostě o to, že máš session. Tu můžeš mít a ani nebudeš přihlášen.
Právě. Tu session to poruší, proto je třeba předávat vlastní token a session simulovat pomocí něj ještě před tím, než se session zavede a potom skončit.
Hele, to chapu, porad ale v tom nevidim souvislost, proc neukladat soubory na disk.
Driver jsem nepsal já a byl psán analogicky v sqlite driveru… Tedy nevyužívá všech pěkných vlastností dibi.
Nevidim duvod, proc by to nemelo jit v sql driveru, je to proste dotaz na stejnou tabulku se stejnou podminku, jde jen o jeho sestaveni.
Moje komponenta pro Plupload vyuziva toto nastaveni:
{"multipart_params":{"guid":"random string vygenerovany komponentou"},"unique_names":true}
Diky tomu to muzu cpat do jednoho adresare. Tam se soubory nauploaduji (chunkama) a po odeslani formu se teprve sestavi Nette\Http\FileUpload, ktery ma i spravne filename, pac to Plupload posle v $_POST.
Ohledne Session – to zrejme je problem, ale zajimave je, ze jsem se s nim nesetkal a zrejme ho neresil (nepamatu ji si, komponenta ma pres 2 roky).
- Honza Kuchař
- Člen | 1662
Čtu si to po několikáté a pořád vůbec nechápu, co vlastně chceš. Vím jen, že si myslíš, že je něco špatně, ale pořád nerozumím tomu co vlastně a hlavně proč. Zkus to prosím popsat nějak srozumitelněji. Proč si myslíš, že je špatně, že si komponenta chce uložit někam informace, které potom nemusí složitě dolovat? Proč si je nemůže uložit třeba do sqlite? Proč nemůže dát volnost programátorovi v podobě driverů?
session a soubory
Soubory se ukládají přímo na disk, jen meta-informace (tj. do které fronty patří a kolik ho zatím dorazilo) se ukládají přes driver. Vůbec netuším, jaký vidíš rozdíl v tom, jestli si komponenta vytvoří několik složek a do nich soubory s metadaty a k tomu uploadované soubory. Nebo jestli si všechny informace uloží do jednohou souboru (sqlite) a potom už se stará jen o uploadované soubory. Nehledě na to, že použiji-li již něco co je odladěné (sqlite), nemusím ladit něco opět od píky.
dibi driver a drivery vůbec
Ano jde to napsat jednodušeji, ale výsledek je ekvivalentní.
nastavení pluploadu
MFU používá normálně názvy souborů s tím, že na disk ukládá
sha1($token . $chunks . $fileNameOriginal)
, aby se vyhnulo
speciálním znakům. MFU by také mohlo všechno ukládat do jednoho
adresáře, stačilo by, aby název souboru prefixoval název fronty.
Problém s flashem a cookies:
http://forums.asp.net/…57515.aspx/1
V zásadě jde o to, že všechny prohlížeče posílají pro požadavky
z flashe cookie Internet Exploreru.
- Honza Kuchař
- Člen | 1662
Pustil jsem se do oddělení příkladu a komponenty samotné…
Narazil jsem však na problémy s GITem i Composerem, se kterými si zatím nevím rady. Pokud někdo tušíte, jak by se toto dalo vyřešit, prosím poraďte!
Problém s GITem. Po rozdělení nejsem schopen připojit do repa příkladu jen část repa komponenty – tedy není možné vytvořit odkaz na adresář. To mi působí značné problémy, protože nejsem schopen do www/MFU připojit složku s js, css, … a do libs/MFU samotné zdrojáky MFU, ale pouze celé repo. Tedy otázka je – je možné to udělat jinak, než založit dvě repa?!
//EDIT: Není toto řešení problému s GITem?
To samé s Composerem. Zdrojáky mají přijít do libs/MFU – v tom není problém. Ale co se složkou, která má přijít do složky www? Nepodařilo se mi nic najít ani na stránkách Composeru.
Při rozdělování jsem předělal adresářovou strukturu, doufám, že k lepšímu… Prosím o komentáře.
(a nyní přemýšlím, jak to celé ztotožnit s myšlenkou DI)
- Honza Kuchař
- Člen | 1662
Můžete vyzkoušet:
composer create-project jkuchar/multiplefileupload-example mfu-example dev-master
Balíček samotného MFU, jestli jsem správně vyrozuměl, nemůže existovat, dokud nebude composer.json v masteru. Tedy je nejdříve potřeba dodělat tu verzi pro Nette 2.0.
- Honza Kuchař
- Člen | 1662
Je to tak, že v současné chvíli existuje vývojová verze pro Nette 2.0. (je to vlastně jen upravená původní verze + clenup) Najdeš ji na Githubu zde: https://github.com/…leFileUpload
Chceš-li si to rozjet i s příkladem, použij composer: https://forum.nette.org/…form-control?p=8 a nebo si jej stáhni z https://github.com/…oad-example/
Už je to jasné? :-)
Každopádně větev pro Nette 0.9 bylo odsunuta na postranní větev.
- Prado
- Člen | 21
koren měl asi na mysli NetteDatabase, která je součástí Nette2 a nikoliv dibi. Samozřejmě, nejlepší by bylo pracovat prostě s cache a nevymýšlet kolo.
Jinak upozorňuji, že objekt SQLiteDatabase už v současné verzi PHP nelze získat, takže implicitní metoda nefunguje a měla by být když ne odebrána, tak změněna na alternativní nebo upgradována (ciki to tuším u sebe má).