Problém s uploadem obrázku = dvojté nahrání
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- wicked
- Člen | 290
Zdravím Vás přátelé …
Mám takovou prosbu, doufám, že budete vědět radu …
Mám formulář, ve kterém vyberete kategorii, a k ní nahrajete fotky
public function createComponentFotoForm() {
$form = new Form();
// Nacteme kategorie
$kategorie = $this->kategorie->findAll()->fetchPairs('id', 'nazev');
$form->addSelect('kategorie_id', '', $kategorie)
->setAttribute('class', 'form-control');
$form->addText('cena', 'Název')
->setAttribute('placeholder', '2,5,-Kč')
->setAttribute('class', 'form-control');
$form->addMultipleFileUpload("upload", "upload", 15)
->addRule('MultipleFileUpload\MultipleFileUpload::validateFilled', "Musíte nahrát aspoň 1 soubor!");
// Odesilaci tlacitko
$form->addSubmit('send', 'Přidat fotografii')
->getControlPrototype()
->class('btn btn-info');
// Zavolame metodu usersFormSucceeded()po uspechu
$form->onSuccess[] = $this->fotoFormSucceeded;
// Set Twitter Bootstrap render
$form->setRenderer(new BootstrapRenderer());
return $form;
}
Zde je vše ok …
Dále mám zpracování formuláře, které fotky převezme, upraví a uloží jak na FTP tak odkaz do DB … Zde mám ale problém, že když nahraji třeba 5 různých fotek, 3 jsou ok, ale zbyle 2 jsou zdvojené (uloženo však pod jiným ID, ale stejná fotka), nebo jsou zdojené všechny, takže z 5 mám nahrané jen 2 originály, zbytek něco jiného … zpracování zde
public function fotoFormSucceeded($form) {
// Nacteme hodnoty z formulare
$id = $this->getParam("id");
$values = $form->getValues();
// Nastaveni ceny
if ($values->cena) {
$cena = $values->cena;
} else {
$cena = "0";
}
// Upravime stránku
if ($id) {
foreach ($values->upload as $a) {
// Pokud ID existuje, nahradime data
$this->eshop->findAll()->where('id', $id)->update(array(
"kategorie_id" => $values->kategorie_id,
"nazev" => Strings::webalize($values->upload->getName()),
"cena" => $cena
));
if ($a->getName()) {
// Zpracovani img
$img_name = Strings::webalize(new \Nette\DateTime);
$img_name_nahled = "nahled_" . Strings::webalize(new \Nette\Datetime);
// Pohyb nahledu souboru a zpracovani
$nahled = Image::fromFile($a);
$nahled->resize(100, NULL, Image::SHRINK_ONLY);
$nahled->toString(\Nette\Image::PNG);
$nahled->save("upload/" . $img_name_nahled . ".png");
// Pohyb souboru a zpracovani
$original = Image::fromFile($a);
$original->resize(500, NULL, Image::SHRINK_ONLY);
$original->toString(\Nette\Image::PNG);
$original->save("upload/" . $img_name . ".png");
// Soubor zapiseme do DB
$ids = $row->id;
$this->soubory->insert(array(
"eshop_id" => $ids,
"nazev" => $img_name,
"cesta" => "/upload/" . $img_name . ".png",
"nahled" => "0"
));
$this->soubory->insert(array(
"eshop_id" => $ids,
"nazev" => $img_name_nahled,
"cesta" => "/upload/" . $img_name_nahled . ".png",
"nahled" => "1"
));
} else {
unset($a);
}
}
// Vypíšeme info a přesměrujeme
$this->flashMessage("Fotografie byla úspěšně upravena!", "alert alert-success");
$this->redirect("Eshop:editovatFotku");
} else {
foreach ($values->upload as $a) {
// Pokud ID existuje, nahradime data
$row = $this->eshop->insert(array(
"kategorie_id" => $values->kategorie_id,
"nazev" => Strings::webalize($a->getName()),
"cena" => $cena
));
if ($a->getName()) {
// Zpracovani img
$img_name = Strings::webalize(new \Nette\DateTime);
$img_name_nahled = "nahled_" . Strings::webalize(new \Nette\Datetime);
// Pohyb nahledu souboru a zpracovani
$nahled = Image::fromFile($a);
$nahled->resize(100, NULL, Image::SHRINK_ONLY);
$nahled->toString(\Nette\Image::PNG);
$nahled->save("upload/" . $img_name_nahled . ".png");
// Pohyb souboru a zpracovani
$original = Image::fromFile($a);
$original->resize(500, NULL, Image::SHRINK_ONLY);
$original->toString(\Nette\Image::PNG);
$original->save("upload/" . $img_name . ".png");
// Soubor zapiseme do DB
$ids = $row->id;
$this->soubory->insert(array(
"eshop_id" => $ids,
"nazev" => $img_name,
"cesta" => "/upload/" . $img_name . ".png",
"nahled" => "0"
));
$this->soubory->insert(array(
"eshop_id" => $ids,
"nazev" => $img_name_nahled,
"cesta" => "/upload/" . $img_name_nahled . ".png",
"nahled" => "1"
));
} else {
unset($a);
}
}
// Vypíšeme info a přesměrujeme
$this->flashMessage('Přidání fotografie bylo úspěšné!', 'alert alert-success');
$this->redirect('Eshop:editovatFotku');
}
}
Jsem už krapet bezradný … Za každou radu děkuji!
- David Matějka
- Moderator | 6445
Dej na konec toho foreach sleep(1)
</troll>
Editoval matej21 (11. 11. 2014 21:01)
- David Matějka
- Moderator | 6445
Strings::webalize(new \Nette\Datetime);
bude v jedne sekunde vytvaret porad stejny retezec…