Zkušenosti s rozjetím [nepada/file-upload-contro] dropzone uploader souborů
- jakteratix
- Člen | 3
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
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
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
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)