我有 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>';
};
它所做的只是计数:
- 文件数
- 所有文件名组合的字符数
- 总文件大小的 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 中,最大值似乎要高得多。至少“2343 个文件:310.66553999999996 MB / 60748 个文件名字符”(这就是我在这里拥有的所有文件)
- 在 Firefox 中:“16686 个文件:55.144415 MB / 146224 个文件名字符”(小得多,但文件更多)
更新
- Chrome 52 canary Windows 还是 32k 的文件名
- Firefox (44+) Windows 仍然是无限的