Uložení souboru na hosting
- wicked
- Člen | 290
Zdravím,
samozdrejmne jsem četl dokumentace o nahrátí souboru.
Obrázky zpracovávám a ukládám v pohodě
Form
$form->addUpload('img', 'Nahrát obrázek')
->addCondition(Form::FILLED)
->addRule(Form::IMAGE, 'Soubor musí být obrázek - .jpg, .gif, .png')
->addRule(Form::MAX_FILE_SIZE, 'Soubor je příliš velký! Povolená velikost je 2M.', 2 * 1024 * 1024);
Zpracovani z formu
if ($values->img->getName()) {
// Zpracovani img
$img_name = Strings::webalize(new \Nette\DateTime);
// Pohyb souboru a zpracovani
$img = Image::fromFile($values->img);
$img->resize(500, NULL, Image::SHRINK_ONLY);
$img->toString(\Nette\Image::PNG);
$img->save("upload/" . $img_name . ".png");
$this->soubory->insert(array(
"carousel_id" => $id,
"cesta" => "/upload/" . $img_name . ".png"
));
} else {
unset($values->img);
}
Ale již nikde se nemůžu dočíst, jak řešit když je soubor třeba PDF, DOC, EXE, AVI atd …
Logicky ->save, ->move atd nefunguje kdyz to neni obrazek
Zkoušel jsem
if($values->upload) {
// Prace se souborem
$name = $values->upload->name;
$names = "/upload/" . $name;
$soubor = FileSystem::write($name, $names, $mode = 0666);
//$soubor->move('/upload/' . $name);
}
Ale taktéž bez úspěchu…
Děkuji za každou radu!
- David Kudera
- Člen | 455
No ani ten obrázek neukládáš až tak v pohodě. Minimálně si to můžeš usnadnit tak, že místo ručního vytváření použiješ tohle:
$img = $values->img->toImage();
jinak to img v proměnné values je objekt FileUpload a v něm je i metoda move , kterou právě použiješ na uložení čehokoliv (nezáleží na typu souboru)
Edit: a taky když už máš use pro Nette\Image, tak není potřeba
používat (ani to není doporučené) celý tento kód:
\Nette\Image::PNG
. Takže stačí jen Image::PNG
.
A taky by to chtělo udělat něco i s tím
Nette\DateTime
;-)
Edit 2: no a ještě cestu k obrázku nějak dát líp. Třeba něco jako
__DIR__. '/../../www/uploads/'. $img_name. '.png'
? Ať to ví, kam
to vlastně přesně uložit. Líp ale třeba přes nějakou
konfiguraci apod.
Editoval David Kudera (13. 8. 2014 8:08)
- wicked
- Člen | 290
OK, vím že nemám bestpractics na ukladání obrázků, ale jak tedy udělat ukládání čehokoli?
if($values->upload) {
// Prace se souborem
$name = $values->upload->name;
$names = "/upload/" . $name;
//$soubor = FileSystem::write($name, $names, $mode = 0666);
$names->move('/upload/' . $name);
}
Omlouvám se, až potom co jsem to dopsal jsem to vyřešil takto
if($values->upload) {
// Prace se souborem
$doc = $values->upload;
$doc->move("upload/" . $values->upload->name);
}