Problém s file upload

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

Ahoj,

mám komponentu

protected function createComponentGallery() {
    $form = new AppForm($this, 'gallery');
    $form->addFile('photo', 'Fotografie č. 1:');
    $form->addSubmit('upload', 'Upload')
        ->onClick[] = array($this, 'upload');

    return $form;
}

přes, kterou chci nahrávat fotky na server, jenže mi to nefunguje, a když to dumpnu, tak mi to neustále vrací toto:

object(HttpUploadedFile) (6) {
  "name" private => string(12) "IMG_3487.JPG"
  "type" private => string(0) ""
  "realType" private => NULL
  "size" private => int(0)
  "tmpName" private => string(0) ""
  "error" private => int(1)
}

Kde by mohla být chyba?

kravčo
Člen | 721
+
0
-

choko napsal(a):

Kde by mohla být chyba?

Tu ;)

"error" private => int(1)

error je 1, teda UPLOAD_ERR_INI_SIZE, uploaduješ príliš veľký súbor.

choko
Člen | 8
+
0
-

Děkuji, je to ono, já hlupák si myslel, že 2M na fotku stačí

David Grudl
Nette Core | 7823
+
0
-

V API HttpUploadedFile je metoda isOk(), kterou se musí ověřit, zda upload proběhl ok.

choko
Člen | 8
+
0
-

Ještě bych měl jeden dotaz.

Trochu jsem upravil komponentu takto:

protected function createComponentGallery() {
    $form = new AppForm($this, 'gallery');
    $form = $form->addContainer('file');
    $form->addFile('1', 'Fotografie:');
    $form->addFile('2', 'Fotografie:');
    $form->addFile('3', 'Fotografie:');
    $form->addFile('4', 'Fotografie:');

    $form->addSubmit('upload', 'Upload')
        ->onClick[] = array($this, 'upload');

    return $form;
}

a zpracovávám ji takto:

public function upload(SubmitButton $submit) {
    $data = $submit->getForm()->getValues();
    $id = $this->getParam('id');

    Debug::dump($data);
    foreach($data['file'] as $d) {
	    if($d->isOK()) {
            Photos::savePhoto($id, $d);
        }
    }

}

Jenže onen dump vrací toto a to jsem velikost uploadu zvětšil na 20M:

array(1) {
  "file" => array(4) {
    1 => NULL
    2 => NULL
    3 => NULL
    4 => NULL
  }
}
kravčo
Člen | 721
+
0
-

Súbory na upload musíš pridávať kontajneru, handler formuláru i vrátiť treba formulár.

nesprávne:

$form = new AppForm($this, 'gallery');
$form = $form->addContainer('file');
// ...

správne:

$form = new AppForm($this, 'gallery');

$files = $form->addContainer('file');
$files->addFile('1', 'Fotografie:');
$files->addFile('2', 'Fotografie:');
$files->addFile('3', 'Fotografie:');
$files->addFile('4', 'Fotografie:');

$form->addSubmit('upload', 'Upload')
    ->onClick[] = array($this, 'upload');

return $form;
choko
Člen | 8
+
0
-

Bohužel to stejně nefunguje.

Editoval choko (21. 8. 2009 14:31)

_Martin_
Generous Backer | 679
+
0
-

kravčo napsal(a):

choko napsal(a):

Kde by mohla být chyba?

Tu ;)

"error" private => int(1)

error je 1, teda UPLOAD_ERR_INI_SIZE, uploaduješ príliš veľký súbor.

Snad to nebude bráno jako neskromné upozornění na vlastní dílo, ale jak ošetřit takovéto chyby se můžeš podívat v mých starších příspěvcích: tady a tady.

P.S. Davide, co to zaintegrovat do frameworku?

David Grudl
Nette Core | 7823
+
0
-

Dobrý nápad, dávám do TODO