在 HTML5 [多个] 文件输入中选择的最大文件数是多少?
Posted
技术标签:
【中文标题】在 HTML5 [多个] 文件输入中选择的最大文件数是多少?【英文标题】:What is the max number of files to select in an HTML5 [multiple] file input? 【发布时间】:2013-03-28 22:05:38 【问题描述】:我有 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的错吗?搜索“file input max files”等只会导致[max]属性,这无关紧要。
更多测试结果:
在 Firefox 中,最大值似乎要高得多。至少“2343 个文件:310.66553999999996 MB / 60748 个文件名字符”(这就是我在这里拥有的所有文件) 在 Firefox 中也是:“16686 个文件:55.144415 MB / 146224 个文件名字符”(小得多,但文件更多)更新
Chrome 52 canary Windows 仍然是 32k 的文件名 Firefox (44+) Windows 仍然不受限制【问题讨论】:
【参考方案1】:为什么会有这么多文件?
文件的数量取决于所有文件名组合的字符数。
为什么是这个最大值?
在 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的错吗?
没有。
【讨论】:
完美答案!根据 Chromium 的说法,它已在 10 中修复。对...我无法评论 =( 我创建了一个链接到 2 个“已修复”问题的新问题:code.google.com/p/chromium/issues/detail?id=237500 非常酷。在 Windows 机器上,我能够测试文件名的上限为 215 个字符 + 点 + 3 个扩展字符 = 总共 219 个字符。 Chrome 50 中仍然存在该问题,请参阅此 Chromium 错误跟踪器:bugs.chromium.org/p/chromium/issues/detail?id=112538以上是关于在 HTML5 [多个] 文件输入中选择的最大文件数是多少?的主要内容,如果未能解决你的问题,请参考以下文章
HTML5 File API 按顺序包含多个文件,而不是一次全部
input:file 选择多个文件 用FileReader读取为二进制