Multiupload a max_post_size

Allconius
Člen | 313
+
0
-

Ahoj, jak řešíte zobrazování chyby u multiupload pokud velikost všech souborů překročí post_max_size ? Jde přidat na to nějaké pravidlo jako je třeba pro počet souborů?

$form->addMultiUpload('files', 'Files:')
	->addRule($form::MaxLength, 'A maximum of %d files can be uploaded', 10);

po odeslání formu mi to totiž okamžitě vyhodí error 500 a k zpracování typu:

        $total = 0;
        foreach ($data->mediafiles as $size){
            $total = $total + $size->getSize();
        }

se už nedostanu. Jde mi o to jak uživateli zobrazit nějakou hlášku že je velikost odesílaných dat větší než je povoleno v php.ini

Pavel Kravčík
Člen | 1182
+
0
-

Cca:

intval(Strings::before(ini_get('upload_max_filesize'), 'M'))
Allconius
Člen | 313
+
0
-

Pavel Kravčík napsal(a):

Cca:

intval(Strings::before(ini_get('upload_max_filesize'), 'M'))

Ahoj, ten post_max_size to je v pohodě ten si vyčtu, jde mi o souhrnnou velikost těch ukládaných souborů, kde si ji zjistit před odesláním formu

m.brecher
Generous Backer | 765
+
0
-

@Allconius

kde si ji zjistit před odesláním formu

javascriptem by to mělo jít nějak takto, zjišťovat celkovou velikost ihned po výběru souborů inputem a blokovat odeslání formuláře, nicméně nebude úplně jednoduché to vkomponovat do stávající validace Nette formulářů:

document.getElementById('file').addEventListener('change', () => {
    let size = 0
    this.files.forEach(file => size += file.size)
    console.log(size);
})
Allconius
Člen | 313
+
0
-

m.brecher napsal(a):

@Allconius

kde si ji zjistit před odesláním formu

javascriptem by to mělo jít nějak takto, zjišťovat celkovou velikost ihned po výběru souborů inputem a blokovat odeslání formuláře, nicméně nebude úplně jednoduché to vkomponovat do stávající validace Nette formulářů:

document.getElementById('file').addEventListener('change', () => {
    let size = 0
    this.files.forEach(file => size += file.size)
    console.log(size);
})

Ahoj, díky, udělal jsem to zatím aspoň přes ten alert:

<input n:name="mediafiles" id="mediafiles" max="{$post_max_size}" class="form-control rounded-0" type="file" multiple>
                                        $('#mediafiles').change(function(){
                                            var fp = $("#mediafiles");
                                            var max = fp.attr("max");
                                            var lg = fp[0].files.length;
                                            var items = fp[0].files;
                                            var fileSize = 0;
                                            if (lg > 0) {
                                                for (var i = 0; i < lg; i++) {
                                                    fileSize = fileSize+items[i].size;
                                                }
                                                console.log(max)
                                                console.log(fileSize)
                                                if (fileSize>max){
                                                    alert('Velikost je větší než '+max);
                                                }

                                            }
                                        });