File upload soubor se ztratí po cestě

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

Ahoj,

Mám formulář

public function createComponentAddFileForm(){
        $subs = $this->model->schedule->getSubjects()->where('status != ?','obed')->fetchPairs('id','short');
        $form = new Form;
        $form->addText('name', "Název:")
              ->addRule(Form::MIN_LENGTH, 'Název musí mít minimálně 3 znaky.', 3)
              ->addRule(Form::MAX_LENGTH, 'Název může být maximálně 30 znaků dlouhý.', 30)
              ->addRule(Form::FILLED, 'Název není vyplněno.');
        $form->addSelect('subject_id', 'Pojit s předmětem:', $subs)
              ->setPrompt('Zvolte předmět')
              ->setRequired('Vyberte předmět.');
        $form->addCheckbox('private','Pouze pro spolužáky');
        $form->addUpload('soubor', 'Soubor:')
             ->setRequired()
             ->addRule(Form::MAX_FILE_SIZE, 'Maximální velikost souboru je 32 MB.', 32 * 1024 * 1024 /* v bytech */);
        $form->addSubmit('add', 'Nahrát  soubor jaffu')
              ->setAttribute('class', 'btn btn-block');
        $form->onSuccess[] = array($this, 'AddFileFormSubmitted');
        return $form;
    }
    public function AddFileFormSubmitted(Nette\Application\UI\Form $form){
        $values = $form->getValues();
        $path = __DIR__."/../www/uploaded/".$this->user->class_id."/";
        $file = $values["soubor"];
        if( $file->isOK() ){
            $orign = explode('.',$file->getName());
            $soubor_nazev = sha1(date('c')).'.'.strtolower($orign[1]);
            $name = $path . $soubor_nazev;
            $file->move($name);
        }
        $values['name'] = $values['name'].'.'.strtolower($orign[1]);
        $values['path'] = "/".$this->user->class_id."/".$soubor_nazev;
        $this->model->file->add($values);
        $this->flashMessage('Soubor byl nahrán');

    }

Formulář pošle request

POST /files/?do=addFileForm-submit HTTP/1.1
Host: www.honza.schoolcloud.cz
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: cs,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://www.honza.schoolcloud.cz/files/
Cookie: _ga=GA1.2.938318968.1392125709; PHPSESSID=de8ee7c12381d47fe6bf5c9f341c63f7; nette-browser=crnjg17u4d
Connection: keep-alive

Částimultipart/form-data

name	gf5
subject_id	22
soubor	ÿØÿà�JFIF��H�H��ÿÛ�C�ÿÛ�CÿÀ���"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ���?�ü»¾ÔãòÎX�pëÎOqõãééX_ü7kà½KB´µš[‹m{áÿ�€|eÓÍÏ!ñ…tÍ~p¾TéQ^^Ü[ÃnDòAK·3Ê©¾�ðõώ./5MBæ]áÿ�…͵÷ü\ÞH‹AÐË<—cŽgDÔ5ÛØ`’ËÃúJږ¹s¦i¬ð½üÛ¾=ý¡>|H¹ÙñSÂ_®í´¹ç²ð^«à]ÂþÔüàˆ!’-áçöN·£x’ÓÅ^ðè[a£Mq¬hµ–ýM¾×<7ñÙÚ(å97³¦åQªr©:n„§Íi(¶ªëä£wÍÊӔ\\—,œèÿ�ď¾»‹£Oªcèap¸•›ÐÂN=˜ˆá§÷jΔ*WŒ)Ö©*Ú5a‡«Š•l<*|âmAÓSeIÞ1ä¡*²2äù’Œ¬8�dóÀ��®7â^³á˜|c«Gá{ûË߬¹Ñ®u`‰©½ƒ–x–ýRÖÎ?¶BY¡¸hm¡æÞÝL-1_P°“I+7d•ÓM;Y]>«³íò¿óœø£ R¤ª9ò9É˖¥ã8ó8»N?fIJҋÕ;§ÖýôÞ$Ö㱟NQºM>æx.nlâu²¸¹¶Y£¶¸žÕdM=²\N–óII Ï2ÆʲÈÍõÝRóc3$î ð“ÎLzãŠ(0É^-ÒÙmdíé}}Nò_c/ÞT÷®åïËÞ|±Wzê쒻è’èÖešâõ¥u!á6à€îA;ÕÎ~lg<àÎI(¢½#óۓm¶ÛÖï{¸_ó{?ÿÙ
add	Nahrát soubor jaffu

Ale po načtení hodí formulář chybu This field is required, čímž myslí že nebyl odeslán soubor.

Děkuji za rady.

Jan Tvrdík
Nette guru | 2595
+
0
-

Zkus aktuální verzi Nette.

johnygemityg
Člen | 30
+
0
-

Ten problém právě s novou verzi Nette přišel.

Jan Suchánek
Člen | 404
+
0
-

johnygemityg: Zkoušel jsem a vše funguje vpořádku, co ti hlásí když vyhodíš ->setRequired() od souboru?

johnygemityg
Člen | 30
+
0
-

Zkončí to chybou, Undefined variable: orign

dump($file)

Nette\Http\FileUpload #a39a
name private => "adobe-ikona.jpg" (15) type private => NULL size private => 0 tmpName private => "" error private => 6

Otázka co je error 6.

--update–
error 6 je Missing a temporary folder. Introduced in PHP 4.3.10 and PHP 5.0.3.

Problém bude asi s hostingem

--update--

Chyba byla na hostingu chyběla složka tmp.
Dík za trknutí

Editoval johnygemityg (11. 2. 2014 18:55)

Jan Suchánek
Člen | 404
+
0
-

johnygemityg: možná, ty to netestuješ u sebe? Jo jinak asi kecám, ale nemají být ty explode a skládání $path podle parametru od uživatele až v modelu?

public function AddFileFormSubmitted(Nette\Application\UI\Form $form){
     $values = $form->getValues();

		try {
			$this->model->upload->add($values, $this->user->class_id);
		        $this->flashMessage('Soubor byl úspěšně uložen.');
		} catch( ? $e){
			$form->addError("Chyba: Soubor se nepodařilo nahrát.");
		}

 }

ale možná píšu kraviny, jen si myslím, že by toho v presenteru nebo komponentě moc být němělo.

Editoval jenicek (11. 2. 2014 19:08)