Zkušenosti s rozjetím [nepada/file-upload-contro] dropzone uploader souborů

jakteratix
Člen | 3
+
+1
-

Zdravím, má někdo zkušenosti s rozjetím dropzone uploadru souborů nepada / file-upload-control.
Je to postavené na blueimp-file-upload.

Zvolil jsem možnost A, klasicky přidáním rozšíření.
Vykresluji jej automaticky přidáním do formuláře v presenteru resp. modelu, ale netuším jakým způsobem se dostat k vybraným souborům.
Při vložení souborů jsou nahrány do temp složky, $data->files z formuláře je prázdné pole.

Případně jaké jsou aktuálně dostupné nějaké jiné dropzone uploadry?

Terka04
Člen | 44
+
+1
-

Ahoj,
v továrničce bys měl nahradit addUpload za addFileUpload (registruje to tato knihovna) a pak budeš mít přístup k souborům.

„This will register extension method addFileUpload($name, $label = null): FileUploadControl to Nette\Forms\Container.“

Editoval Terka04 (7. 4. 2022 7:00)

jakteratix
Člen | 3
+
0
-

Jo děkuju, všechno je nastaveno jak má a šlape to :D. Nakonec jsem ještě objevil chybné html ve své šabloně, které neumožnilo
předání instancí souborů do handle funkce.

jakteratix
Člen | 3
+
0
-

Narazil jsem na problém při kontrole typu souboru:

$form->addFileUpload('files', 'Soubory:')
                ->addRule($form::MIME_TYPE, 'Lze nahrát pouze obrázky, video nebo audio', ['image/*','video/*', 'audio/*'])
                ->addRule($form::MAX_LENGTH, 'Maximálně lze nahrát %d souborů', 20);

Obrázky projdou, mají nastavené type = null, ale videa a audio skončí u této chyby při validaci.
Po odebrání pravidla pro validaci, projdou všechny soubory, všechny mají type = null.

TypeError
strtolower(): Argument #1 ($string) must be of type string, null given

V souboru: vendor\nette\forms\src\Forms\Validator.php

/**
350:         * Has file specified mime type?
351:         * @param  string|string[]  $mimeType
352:         */
353:        public static function validateMimeType(Controls\UploadControl $control, $mimeType): bool
354:        {
355:            $mimeTypes = is_array($mimeType) ? $mimeType : explode(',', $mimeType);
356:            foreach (static::toArray($control->getValue()) as $file) {
357:                $type = strtolower($file->getContentType());
358:                if (!in_array($type, $mimeTypes, true) && !in_array(preg_replace('#/.*#', '/*', $type), $mimeTypes, true)) {
359:                    return false;
360:                }
361:            }

Soubory se vlastně nahrávají po částech, tedy na začátku je informace o typu, potom už jen null.
Validace tedy probíhá správně, ale bude nutné ji v případě null obejít.

Editoval jakteratix (8. 4. 2022 15:37)