problemy s metodou move pri uploadu souboru
- wb2009
- Člen | 125
Zdravím, zkouším si vytvořit vlastní nahrávaní souborů na server, ale stále narážím na problémy.
Na fóru jsem si zjistil, že v metode move(), musí být celá adresa, což jsem původně neměl, nicméně stále narážím na hlášení:
**rename(cestaksouboru/dsc05531.jpg): Invalid argument **
hodím sem i část kódu, který by to měl přesunout a uložit do db cestu…
else {
$added = $this->context->createUpload_files()->insert(array(
'nazev' => $form->values->nazev,
'datum' => new DateTime(),
));
$file_id = $added->id;
$file = $form['soubor1']->getValue();
$file_name=Strings::lower($file->name);
$file->move($this->context->expand('%wwwDir%/files/'.$file_name));
$this->context->createUpload_files()->find($file_id)->update(array(
'url' => '/files/' . $file_name
));
jinak jsem zjistil, že hlášení se zobrazí jen u některých souborů (Vím o PDF a obrazkových souborů), podařilo se mi nahrát bezproblémů csv soubor…
Děkuji za pomoc.
Editoval wb2009 (9. 3. 2013 19:03)
- wb2009
- Člen | 125
Nevím čím to, ale na ostrém serveru to běží, asi něco špatně u mne na locale, nicméně zjistil jsem takovou nepěknou věc:
když zadám validaci, že soubor musí být např max 1000 kb, tak nejprve se soubor nahrává od klienta na server, jakmile se nahraje, tak se vyhodnotí podmínka např: soubor>1000kb a teprve pak se ozve to hlášení, což mne přivádí na myšlenku, že v případě nahrávání větších souborů, např v rámci několika MB, bude uživatel celkem dlouho čekat než se to nahraje na server a pak bude docela i zklamán, pokud mu soubor neprojde a on tak dlouho čekal. Napadá mne to ošetřit to na straně klienta asi nějakým javascriptem, neřešil už někdo něco podobného? Př. neřeší to nějak Nette ještě?
Editoval wb2009 (9. 3. 2013 22:58)
- enumag
- Člen | 2118
Pokud vím tak to z bezpečnostních důvodů není možné
Něco jsem našel tady. Nette to pokud vím neřeší.
Editoval enumag (10. 3. 2013 0:23)
- Honza Kuchař
- Člen | 1662
Co se tyka move:
Muze to byt tim, ze mas tem pro upload na disku C a data na disku D. S tim si
Nette neumi poradit. Mozna ti pomuze toto vlakno: https://forum.nette.org/…sunu-souboru
- wb2009
- Člen | 125
Díky za odpovědi.
Mrknu na ten odkaz, je přece hloupé zobrazit hlášení o moc velkém souboru, až potom co se nahraje na server.Jednak, zbytečná zátěž pro server a jednak nasranost uživatele, když několik minut čeká a pak to neprojde.
Tím diskem to nebude, vše mám na disku C. Hlavně, že to jde na ostrém serveru.
- jiri.pudil
- Nette Blogger | 1032
Nette volá rename
v případě, že
is_uploaded_file(...) === FALSE
. Zkus si ten přesun a uložení do
databáze obalit podmínkou $file->isOk()
a pokud neprojde,
podívat se na $file->error
(možné hodnoty zde).
- wb2009
- Člen | 125
Děkuji za podněty, nakonec jsem to vyřešil tak, že jsem si zjistil koncovku souboru, a dal souboru nový název+koncovku souboru, světe div se, bere mi to i soubory, které mi to na locale nebralo, pro mne je koncovka víc cool, možná by stálo za přidání do knihovny ** Nette\Http\FileUpload**, já totiž pak jednoduše na typ koncovky mohu dát case a dle něho příslušné ikony, no a uživatelé mi za to sice líbat ruku nebudou, ale pivo by za to bejt mohlo :)
kdyby někdo chtěl, mohu sem pak uploadnout můj kód..