File upload soubor se ztratí po cestě
- johnygemityg
- Člen | 30
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 Suchánek
- Člen | 404
johnygemityg: Zkoušel jsem a vše funguje vpořádku, co ti hlásí když vyhodíš ->setRequired() od souboru?
- johnygemityg
- Člen | 30
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
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)