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"2B¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ���?�ü»¾ÔãòÎX�pëÎOqõãééX_ü7kà½KB´µ[m{áÿ�|eÓÍÏ!ñtÍ~p¾TéQ^^Ü[ÃnDòAK·3Ê©¾�ðõÏ./5MBæ]áÿ�͵÷ü\ÞHAÐË<cgDÔ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ÒÕ;§ÖýôÞ$Öã±NQº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)