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
+
0
-

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
+
0
-

Nemáš na $form[‚file‘] navěšená nějaká validační kriteria?

Odkud voláš addFileForm?

wassy
Člen | 46
+
0
-

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() {

    }

}
japlavaren
Člen | 404
+
0
-

nakopiruj sem dump $_FILES a dump $form->values->files

wassy
Člen | 46
+
0
-
/*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
+
0
-
error => array (2)
0 => 1
1 => 0

Value: 1; The uploaded file exceeds the upload_max_filesize directive in php.ini.

wassy
Člen | 46
+
0
-

matej21 napsal(a):

error => array (2)
0 => 1
1 => 0

Value: 1; The uploaded file exceeds the upload_max_filesize directive in php.ini.

Aha :D sakra :D asi jsem se předtím někde blbě díval…jsem si říkal že je blbost aby to bylo kvůli názvu souboru…