PDF upload problém – best practice?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
thesmith
Člen | 5
+
0
-

ahoj, s nette pracuju jen občas a využívám jej hlavně na formuláře, mám však problém s uploadováním souborů. Zatím to testuji na localhostu.

Problém je, že mi to soubor nedá tam kam chci já – teda neuploadne ho nikam. Tady je kod z presenteru:

vytvoření formuláře:

<?php

    protected function createComponent($name)
    {
        switch ($name) {
        case 'addForm';
            $id = $this->getParam('id');

            $form = new AppForm;
            $this->addComponent($form, $name);

            $form->addTextArea('nadpis', 'Nadpis: ', 30, 1)
                ->addRule(Form::FILLED, 'Zadejte nadpis produktu.');

            $form->addTextArea('popis', 'Popis : ', 40, 5)
                ->addRule(Form::FILLED, 'Zadejte popis produktu.');

            $form->addFile('dokument', 'Vyberte pdf soubor : ')
                ->addRule(Form::MIME_TYPE, 'Přílohou musí být PDF soubor', 'application/pdf');

            $form->addSubmit('tlacitko', 'Odeslat');
            $form->onSubmit[] = array($this, 'formSubmitted');
            return;

        default:
            parent::createComponent($name);
        }
    }
?>

a následné zpracování formuláře:

<?php
public function formSubmitted(AppForm $form){

        if ($form['tlacitko']->isSubmittedBy()) {
            $id = (int) $this->getParam('id');
            if ($id > 0) {
                $this->model->update($id, $form->getValues(), 'product');
                $this->flashMessage('Záznam byl upraven.');
            } else {
                 $values = $form->getValues();

                 $file = $form['dokument']->getValue();

                 if ($file->isOK())
                 {
                        $file->move(WWW_DIR . "/../uploads");
                 }
                 else
                 {
                        $file->addError("Upload file was not successful");
                 }

                 $values=array(
                  'nadpis'=>$values['nadpis'],
                  'popis'=>$values['popis'],
                  'dokument' => $values['dokument'],
                  'dokument' => mysql_real_escape_string($dokumentPath),
                );

                $this->model->insertProduct($values);

                $this->flashMessage('Záznam uložen.');

            }
        }
        $this->redirect('Default:');
    }
?>

ví někdo kde je chyba? hledal jsem nějakej „best practice“, ale bez výsledku a ve FAQ taky nic :(

Předem díky všem za pomoc.

Ondřej Mirtes
Člen | 1536
+
0
-

Má ta složka uploads právo k zápisu? Existuje? Nebo se ti vypisuje ten error „Upload file was not successful“?

Jinak ten kód vypadá OK.

thesmith
Člen | 5
+
0
-

Ne ne, vypíše mi to záznam uložen. Složka uploads existuje a právo k zápisu má. Jen ten soubor se tam prostě neuloží.

Ondřej Mirtes
Člen | 1536
+
0
-

Jé, já už vidím tu chybu :)

$file->addError("Upload file was not successful");

Musíš to volat na $form :) a dumpni si $file->getError(), ať vidíš, co za chybu to je. Bude to nějaká číselná konstanta.

worsik
Člen | 40
+
0
-

Ahoj, uvažuji, jestli nebude chyba v rozpoznávání mime typu.
řeším podobný problém, protože mi filtr mime type nepozná PDF dokument.

viz https://forum.nette.org/…lication-pdf

Bernard Williams
Člen | 207
+
0
-

Nazdárek,

zkus v tom zpracování formuláře zakomentovat to přesměrování – $this->redirect('Default:');. Já s tím nedávno měl problém a ac to zní sebevíc absurdně, tak ono zakomentování redirectu ve zpracování formuláře opravdu pomohlo. Dál jsem, bohužel, neměl čas to víc řešit.

Bernard