Multiple File Upload Nette 2.1 – maximální počet nahrávaných souborů v jednom requestu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
James
Člen | 54
+
0
-

Ahoj,

je možné v Nette 2.1 u Multiple File Upload

$form->addUpload('files', 'Soubory:', TRUE)

nějakým způsobem možné zjistit počet vybraných souborů, které se následně mají uploadovat? Narazil jsem totiž na problém, že pokud vyberu více jak 20 souborů, tak mi to nahlásí chybu v laděnce

User Notice

Possible problem: you are starting session while already having some data in output buffer. This may not work if the outputted data grows. Try starting the session earlier.

a v PHP se jedná o

Warning: Maximum number of allowable file uploads has been exceeded

Našel jsem že v nastavení PHP, soubor php.ini je řádek s údajem, který udává maximální počet souborů, které je možné uploadovat při jednom requestu

max_file_uploads = 20

Protože asi by bylo dobré, kdyby se v závislosti na této hodnotě dalo už předem před samotným uploadem uživatele, který se pokouší nahrát víc jak 20 souborů o tom, že je něco špatně. Nebo se tento problém řeší nějakým jiným způsobem. Děkuji za rady.

s4muel
Člen | 92
+
0
-

priamo v nette neviem, ale keby si to kontroloval jquery, tak toto by mohlo ist

$('#multipleinput').change(function () {
    if (2 < this.files.length) {
        alert('maximalne 2 subory');
    }
});
$('#form_with_multipleinput').submit(function () {
    if (2 < this.files.length) {
        return false;
    }
});

http://jsfiddle.net/uU9wN/

Editoval s4muel (20. 1. 2014 16:48)

romiix.org
Člen | 343
+
0
-

Nepríjemný problém. Toto by asi mal riešiť priamo FW. V špecifikácií HTML som žiaľ nenašiel obmedzenie množstva nahrávaných súborov.

Napadá mi jedno nepekné čiastkové riešenie. Premennú dodať cez data atribút do frontendu

->setAttribute('data-nette-max-count', ini_get("max_file_uploads"));

a následne spracovať cez JS

$(function() {
	$( "input[type=file]" ).change(function() {
		if ($(this).data("nette-max-count")<$(this).get(0).files.length)
			alert("Maximal count of uploaded files is " + $(this).data("nette-max-count") + "!");
	});
});

Pravdaže nie presne týmto JS:) Ako rozšírenie netteForms.js by to bolo určite lepšie.

craz
Člen | 34
+
0
-

Nebude fungovat Form::MAX_LENGTH?

honos
Člen | 109
+
0
-

A myslis ze zpracovani vice jak 20 souboru neprekroci casovy limit zpracovani php skriptu ktery je vetsinou nastaveny na 30 sekund?

James
Člen | 54
+
0
-

honos napsal(a):

A myslis ze zpracovani vice jak 20 souboru neprekroci casovy limit zpracovani php skriptu ktery je vetsinou nastaveny na 30 sekund?

@honos: Máš pravdu, že v tomhle by mohl nastat problém. Úplně jsem si to neuvědomil. Mě spíš ani tolik nešlo o navýšení souborů o víc než 20, ale spíš na to nějakým způsobem upozornit uživatele.

Editoval James (21. 1. 2014 21:27)