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
+
0
-

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
+
+1
-

Dej na konec toho foreach sleep(1)

</troll>

Editoval matej21 (11. 11. 2014 21:01)

wicked
Člen | 290
+
0
-

matej21 napsal(a):

Dej na konec toho foreach sleep(1)

</troll>

Ono to pomohlo … Nahrává se to v pořádku … Ale absolutně nechápu jak to? Vysvětlíš mi to prosím nějak?

Děkuji

David Matějka
Moderator | 6445
+
+1
-
Strings::webalize(new \Nette\Datetime);

bude v jedne sekunde vytvaret porad stejny retezec…

wicked
Člen | 290
+
0
-

matej21 napsal(a):

Strings::webalize(new \Nette\Datetime);

bude v jedne sekunde vytvaret porad stejny retezec…

Takže v tomhle byl celý zakopaný pes … a já to již několikrát přepisoval a rval si vlasy …

Mockrát děkuji ;)

Šaman
Člen | 2666
+
0
-

Spíš by bylo lepší vytvořit unikátní název pomocí mikrosekund, náhodného řetězce, hashe, nebo podobně.

wicked
Člen | 290
+
0
-

Šaman napsal(a):

Spíš by bylo lepší vytvořit unikátní název pomocí mikrosekund, náhodného řetězce, hashe, nebo podobně.

Ano, již jsem to předělal … sleep „zpomaloval“ upload, musel jsem jej nahradi