Каково максимальное количество файлов для выбора в файле ввода HTML5 [multiple]?

у меня есть 64000 небольших изображений, которые я хочу загрузить на свой сайт (используя существующую проверку, поэтому нет FTP и т. д.). Я создал HTML5 [multiple] type=file input для этого некоторое время назад, чтобы использовать его для сотен или сотен изображений. Сотни это не проблема. Изображения пакуются и отправляются на сервер.

но когда я выбираю папку с ~ 16000 изображениями, список файлов ввода файла пуст... Событие onchange запускается, но список файлов пуст. Браузер (или файловая система или ОС?) кажется, есть проблема с выбором этого количества файлов.

Я создал очень маленький инструмент, чтобы помочь определить, что может быть 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>';
};

все, что он делает, это считать:

  • количество файлов
  • количество символов все имена файлов объединяются
  • количество МБ общего размера файла

когда я пытаюсь это, я получаю очень большинство:

1272 файлов: 176.053987 MB / 31469 символов имени файла

(на 32 & 64 бит Win7, Chrome 26-52)

следующее изображение (не) будет составлять:

  • 1273 изображения, что не является очевидным отсечением
  • между 176 и 177 MB размер файла, также не очевидное отключение
  • менее 32000 символов имен файлов, также не очевидное отключение, хотя это похоже на 32к...

в моем calc 1 MB = 1000^2 байта, а не 1024^2. (Это был бы MiB, но, возможно, моя ОС/файловая система/браузер не согласны.)

мой вопрос: почему так много файлов? Почему этот Макс? Зависит ли это от ОС или браузера? Где я могу найти спецификации для этого? Это вина Джей Си? Поиск "file input max files" et al приводит только к атрибуту [max], который не имеет значения.

больше результаты теста:

  • в Firefox Макс кажется, намного выше. По крайней мере," 2343 файла: 310.66553999999996 MB / 60748 символов имени файла " (это все файлы, которые у меня есть прямо здесь)
  • в Firefox также: "16686 файлов: 55.144415 MB / 146224 символов имени файла" (гораздо меньше, но больше файлов)

обновление

  • Chrome 52 canary Windows по-прежнему 32k имени файла
  • в Firefox (44+) Windows по-прежнему неограниченное

1 ответов


почему так много файлов?

количество файлов зависит от количества символов все имена сочетаются.

почему это максимум?

в API Windows максимальное ограничение длины пути составляет 256 символов, API версии Unicode-32 767 символов.

Chrome просто устанавливает максимальную длину пути API версии Unicode, поэтому, как вы заметили, это около 32k символов.
Проверьте это исправление: https://code.google.com/p/chromium/issues/detail?id=44068

Firefox динамически выделяет буфер, достаточно большой для хранения нескольких выбранных файлов, которые могут обрабатывать гораздо большую длину пути.
Проверьте это исправление:https://bugzilla.mozilla.org/show_bug.cgi?id=660833

зависит ли это от ОС или от браузера?

оба.

где я могу найти спецификации для этого?

для использования и ссылки Windows API:
http://msdn.microsoft.com/en-us/library/aa365247.aspx (Максимальная Длина Пути Limitation)
http://msdn.microsoft.com/en-us/library/ms646839(VS.85).aspx

это вина JS?

нет.