【问题标题】:What is the max number of files to select in an HTML5 [multiple] file input?在 HTML5 [多个] 文件输入中选择的最大文件数是多少?
【发布时间】: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 仍然不受限制

【问题讨论】:

    标签: html file-upload fileapi html-input


    【解决方案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的错吗?

    没有。

    【讨论】:

    猜你喜欢
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 2012-03-25
    • 2014-04-21
    • 1970-01-01
    相关资源
    最近更新 更多