2013-04-06 28 views
9

Mam 64000 małych obrazów Chcę załadować na moją stronę (przy użyciu istniejącego sprawdzania poprawności, więc nie ma FTP itp.). Stworzyłem plik HTML5 [multiple] type = input, aby móc go użyć w przypadku setek lub setek obrazów. Setki to nie problem. Obrazy są grupowane i wysyłane na serwer.Jaka jest maksymalna liczba plików do wyboru w danych wejściowych HTML5 [wielu]?

Ale kiedy wybieram folder zawierający ~ 16000 obrazów, lista plików wejściowych FileList jest pusta ... Zdarzenie onchange jest wyzwalane, ale lista plików jest pusta. Wygląda na to, że przeglądarka (lub system plików lub system operacyjny?) Wybiera problem z wyborem wielu plików.

Utworzyłem bardzo małe narzędzie, aby określić, co może być max: http://jsfiddle.net/rudiedirkx/Ehhk5/1/show/

$inp.onchange = function(e) { 
    var l = 0, b = 0; 
    for (var i=0, F=this.files, L=F.length; i<L; i++) { 
     l += F[i].name.length; 
     b += F[i].size; 
    } 
    $nf.innerHTML += this.files.length + ' files: ' + (b/1000/1000) + ' MB/' + l + ' chars of filename<br>'; 
}; 

Wszystko robi to count:

  • liczba plików
  • numer znaków wszystkie nazwy plików są połączone
  • liczba MB całkowitego rozmiaru pliku

Kiedy próbuję to, jak uzyskać jak najwyżej:

1272 pliki: 176,053987 MB/31469 znaków z nazwy pliku

(32 & Win7 64 bit, Chrome 26-52)

następny obraz (co nie) może być:

  • 1273 obrazów, co nie jest oczywiste, c ut-off
  • pomiędzy 176 a 177 MB rozmiaru pliku, również nie jest oczywistym odcięciem
  • mniej niż 32000 znaków nazw plików, również nie jest oczywistym punktem odcięcia, chociaż może wyglądać na 32k ...

W moim kalkulatorze, 1 MB = 1000^2 bajty, a nie 1024^2. (To byłby MiB, ale może mój OS/system plików/przeglądarka nie zgadza się.)

Moje pytanie brzmi: dlaczego tak wiele plików? Dlaczego to max? Czy zależy to od systemu operacyjnego lub przeglądarki? Gdzie znajdę specyfikacje? Czy to wina JS? Wyszukaj "pliki maksymalnych plików wejściowych", a tylko wyniki w atrybucie [max], co nie ma znaczenia.

Więcej wyniki badań:

  • W Firefoksie max wydaje się być znacznie wyższa. Co najmniej "2343 pliki: 310.66553999999996 MB/60748 znaków nazwy pliku" (to wszystkie pliki, które mam tutaj)
  • W przeglądarce Firefox również: "Pliki 16686: 55.144415 MB/146224 znaki z pliku”(znacznie mniejszy, ale bardziej pliki)

Aktualizuj

  • Chrome 52 kanarek Windows jest nadal 32k nazwy pliku
  • Firefox (44+) w systemie Windows jest nadal nieograniczony

Odpowiedz

17

dlaczego to wiele plików?

Liczba plików zależy od liczby znaków wszystkich nazw plików.

Dlaczego to max?

W interfejsie API systemu Windows maksymalne ograniczenie długości ścieżki to 256 znaków, interfejs API w wersji Unicode to 32 767 znaków.

Chrome po prostu ustawia maksymalną długość ścieżki interfejsu API w wersji Unicode, czyli około 32k znaków.
Sprawdź ten dylemat: https://code.google.com/p/chromium/issues/detail?id=44068

Firefox dynamicznie przydziela bufor wystarczająco duży, aby pomieścić rozmiar wielu wybranych plików, który mógłby obsłużyć znacznie większą długość ścieżki.
Sprawdź ten dylemat: https://bugzilla.mozilla.org/show_bug.cgi?id=660833

Czy OS uzależnione lub zależne przeglądarka?

Obie.

Gdzie znajdę specyfikację?

Do użycia API Windows oraz odniesienia:
http://msdn.microsoft.com/en-us/library/aa365247.aspx (maksymalna długość ścieżki ograniczeń)
http://msdn.microsoft.com/en-us/library/ms646839(VS.85).aspx

czy to wina JS”?

nr

+0

doskonała odpowiedź! Według Chromium jest to poprawione w 10. Po prawej ... I nie mogę komentować = (Stworzyłem nowy problem z linkami do 2 "naprawionych" problemów: https://code.google.com/p/chromium/ issues/detail? id = 237500 – Rudie

+0

bardzo fajnie Na komputerze z systemem Windows byłem w stanie przetestować, czy nazwa pliku może mieć górny limit 215 znaków + kropka + 3 znaki rozszerzające = łącznie 219 znaków – Rose

+2

Problem jest nadal obecny w Chrome 50 zobacz ten moduł do śledzenia błędów Chrom: https://bugs.chromium.org/p/chromium/issues/detail?id=112538 – Alex