Nefunkční upload souboru s podtržítky ve jméně
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- wassy
- Člen | 46
Dobrý den,
řeším upload souboru a narazil jsem na divný problém, jakmile uploaduju
soubor, který má ve jméně podtržítka např krasny_soubor.pdf tak se mi
funkce isOk() vrací FALSE, přitom když si vydumpuju $_FILE, žádný error
nevidím.
zde funkce která řeší zpracování formuláře:
public function addFileForm($form, $values) {
$files = $values['file'];
if (!$files) {
$this->flashMessage('Nebyl vybrán žádný soubor/y', 'warning');
$this->redirect('this');
}
foreach ($files as $file) {
if ($file->isOk()) {
$fileName = $file->getSanitizedName();
$file->move(__DIR__ . '/../../../files/' . $fileName);
} else {
$this->flashMessage('Soubor se nepodařilo nahrát', 'error');
$this->redirect('this');
}
}
$this->flashMessage('Soubory byly nahrány', 'success');
$this->redirect('this');
}
děkuji za jakoukoli radu
- petr.pavel
- Člen | 535
Nemáš na $form[‚file‘] navěšená nějaká validační kriteria?
Odkud voláš addFileForm?
- wassy
- Člen | 46
Tady je celý filePresenter:
<?php
namespace App\AdminModule\Presenters;
use Nette;
use App\Model;
use Nette\Forms\Form;
use Nette\Utils\Arrays;
class FilesPresenter extends BasePresenter {
private $database;
public function __construct(Nette\Database\Context $database) {
$this->database = $database;
}
protected function createComponentFiles() {
$control = new \App\Components\FilesControl;
$control->SetService($this->database);
return $control;
}
public function getFolders($type = NULL) {
$folders['public'] = array('a-datasheets' => 'Datasheety',
'b-certificates' => 'Certifikáty',
'c-company-files' => 'Firemní soubory',);
$folders['security'] = array(
'a-manuals' => 'Manuály',
'b-modules-datasheets' => 'Technocké listy modulů',
'c-software' => 'Software',
'd-firmware' => 'Firmware',
'e-old-documents' => 'Starší dokumenty',
'f-presentions-materials' => 'Prezenční materiály',
);
return ($type) ? $folders[$type] : $folders;
}
protected function createComponentAddFileForm() {
$form = new \Nette\Application\UI\Form;
$form->elementPrototype->addAttributes(array('class' => 'upload-form'));
$items = $this->database->table('technologies')->select('name, link')->fetchAll();
$folders = $this->getFolders();
Arrays::renameKey($folders, 'public', 'Veřejné');
Arrays::renameKey($folders, 'security', 'Zabezpečené');
$technologies = array();
foreach ($items as $name) {
$technologies[$name->link] = $name->name;
}
$form->addSelect('technologie', 'Technologie', $technologies);
$form->addSelect('folder', '', $folders);
$form->addUpload('file', 'Soubor', TRUE)
->setAttribute('class', 'default');
$form->addSubmit('send', 'Nahrát');
$renderer = $form->getRenderer();
$renderer->wrappers['controls']['container'] = NULL;
$renderer->wrappers['pair']['container'] = 'div class="form-pair"';
$renderer->wrappers['label']['container'] = 'div class="wrapper"';
$renderer->wrappers['control']['container'] = NULL;
$form->onSuccess[] = $this->addFileForm;
return $form;
}
public function addFileForm($form, $values) {
$securityFolders = $this->getFolders('security');
$files = $values['file'];
if (!$files) {
$this->flashMessage('Nebyl vybrán žádný soubor/y', 'warning');
$this->redirect('this');
}
foreach ($files as $file) {
if ($file->isOk()) {
$fileName = $file->getSanitizedName();
$folder = (in_array($values['folder'], $securityFolders)) ? '/security/' . $values['folder'] : '/' . $values['folder'] . '/';
$file->move(__DIR__ . '/../../../files/' . $values['technologie'] . $folder . $fileName);
} else {
$this->flashMessage('Soubor se nepodařilo nahrát', 'error');
$this->redirect('this');
}
}
$this->flashMessage('Soubory byly nahrány', 'success');
$this->redirect('this');
}
public function actionDelete($dir, $file) {
unlink($dir . '/' . $file);
$this->flashMessage("Soubor $file byl odstraněn", "success");
$this->redirect('default');
}
public function renderDefault() {
}
}
- wassy
- Člen | 46
/*dump($form->values->file);*/
array (2)
0 => Nette\Http\FileUpload #9337
name private => "Datasheet_Varya-Perimeter_WIR_CZ.pdf" (36)
type private => NULL
size private => 0
tmpName private => ""
error private => 1
1 => Nette\Http\FileUpload #097d
name private => "X32PSS-2006-02.pdf" (18)
type private => NULL
size private => 1208781
tmpName private => "D:\XAMPP\tmp\phpD036.tmp" (24)
error private => 0
/*dump($_FILES);*/
array (1)
file => array (5)
name => array (2)
0 => "Datasheet_Varya-Perimeter_WIR_CZ.pdf" (36)
1 => "X32PSS-2006-02.pdf" (18)
type => array (2)
0 => ""
1 => "application/pdf" (15)
tmp_name => array (2)
0 => ""
1 => "D:\XAMPP\tmp\phpD036.tmp" (24)
error => array (2)
0 => 1
1 => 0
size => array (2)
0 => 0
1 => 1208781
- David Matějka
- Moderator | 6445
error => array (2)
0 => 1
1 => 0
Value: 1; The uploaded file exceeds the upload_max_filesize directive in php.ini.