在HTML5 [多个]文件输入中选择的最大文件数是多少?

Rud*_*die 9 html5 file-upload html-input fileapi

我有64000个小图像,我想上传到我的网站(使用现有的验证,所以没有FTP等).我为此创建了一个HTML5 [multiple] type = file输入,用于一百或几百个图像.数百不是问题.图像被批处理并发送到服务器.

但是当我选择~16000个图像的文件夹时,文件输入的FileList为空... onchange事件触发,但文件列表为空.浏览器(或文件系统或操作系统?)似乎在选择这么多文件时遇到问题.

我创建了一个非常小的工具来帮助确定最大可能的内容: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>';
};
Run Code Online (Sandbox Code Playgroud)

所有这一切都是重要的:

  • 文件数量
  • 所有文件名组合在一起的字符数
  • 总文件大小的MB数

当我尝试这个时,我得到的最多:

1272个文件:176.053987 MB/31469个文件名字符

(在32位和64位Win7上,Chrome 26-52)

下一张图片(失败)将是:

  • 1273张图片,这不是一个明显的截止
  • 介于176和177 MB之间的文件大小,也不是一个明显的截止
  • 少于32000个文件名字符,也不是一个明显的截止,虽然它可能看起来像32k ......

在我的计算中,1 MB = 1000 ^ 2字节,而不是1024 ^ 2.(那可能是MiB,但也许我的操作系统/文件系统/浏览器不同意.)

我的问题是:为什么这么多文件?为什么这个最大?是依赖操作系统还是依赖于浏览器?我在哪里可以找到相关规格?这是JS的错吗?搜索"文件输入最大文件"等只会导致[max]属性,这是无关紧要的.

更多测试结果:

  • 在Firefox中,max似乎要高得多.至少"2343个文件:310.66553999999996 MB/60748个文件名字符串"(这就是我在这里的所有文件)
  • 在Firefox中还有:"16686文件:55.144415 MB/146224字符串字符"(更小,但文件更多)

更新

  • Chrome 52金丝雀Windows仍然是32k的文件名
  • Firefox(44+)Windows仍然是无限的

kel*_*viN 19

为什么这么多文件?

文件数取决于所有文件名组合的字符数.

为什么这个最大?

在Windows API中,最大路径长度限制为256个字符,Unicode版本API为32,767个字符.

Chrome只是设置Unicode版本API的最大路径长度,因此您观察到的大约是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(最大路径长度不限)
http://msdn.microsoft.com/en-us/library/ms646839( VS.85)的.aspx

这是JS的错吗?

没有.

  • 这个问题仍然存在于Chrome 50中,请参阅此Chromium bug跟踪器:https://bugs.chromium.org/p/chromium/issues/detail?id = 112538 (2认同)