本文介绍了什么是在HTML5 [多]文件输入中选择的文件的最大数量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有64000个小图片要上传到我的网站(使用现有的验证,所以没有FTP等)。我已经为此创建了一个HTML5 [multiple] type = file输入,可以用于上百个或上百个图像。数百个不是问题。图片批量发送到服务器。

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



我创建了一个非常小的工具,以帮助确定可能是max:(最大路径长度限制)



不。


I have 64000 small images I want to upload to my website (using existing validation, so no FTP etc). I've created an HTML5 [multiple] type=file input for this a while back to be used for a hundred or hundreds of images. Hundreds is not a problem. The images are batched and sent to the server.

But when I select a folder of ~ 16000 images, the file input's FileList is empty... The onchange event triggers, but the file list is empty. The browser (or file system or OS?) seems to have a problem selecting this many files.

I've created a very small tool to help determine what could be the 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>';
};

All it does is count:

  • the number of files
  • the number of characters all file names are combined
  • the number of MB of total file size

When I try this, I get as very most:

(On 32 & 64 bit Win7, Chrome 26-52)

The next image (which fails) would be:

  • 1273 images, which is not an obvious cut-off
  • between 176 and 177 MB filesize, also not an obvious cut-off
  • less than 32000 chars of filenames, also not an obvious cut-off, although it sort-of maybe looks like 32k...

In my calc, 1 MB = 1000^2 Bytes, not 1024^2. (That would be a MiB, but maybe my OS/filesystem/browser disagrees.)

My question would be: why this many files? Why this max? Is it OS dependent or browser dependent? Where do I find the specs for that? Is it JS' fault? Search for "file input max files" et al only results into the [max] attribute, which is irrelevant.

More test results:

  • In Firefox the max seems to be much higher. At least "2343 files: 310.66553999999996 MB / 60748 chars of filename" (that's all the files I have right here)
  • In Firefox also: "16686 files: 55.144415 MB / 146224 chars of filename" (much smaller, but more files)

Update

  • Chrome 52 canary Windows is still 32k of file name
  • Firefox (44+) Windows is still unlimited

解决方案

The number of files depends on the number of characters all file names are combined.

In the Windows API, the maximum path length limitation is 256 chars, the Unicode version API is 32,767 chars.

Chrome simply sets the max path length of the Unicode version API, so it's about 32k chars as you observed.
Check this fix: https://code.google.com/p/chromium/issues/detail?id=44068

Firefox dynamically allocates a buffer big enough to hold the size of multiple selected files, which could handle much larger path length.
Check this fix: https://bugzilla.mozilla.org/show_bug.cgi?id=660833

Both.

For Windows API usage and reference:
http://msdn.microsoft.com/en-us/library/aa365247.aspx (Maximum Path Length Limitation)
http://msdn.microsoft.com/en-us/library/ms646839(VS.85).aspx

No.

这篇关于什么是在HTML5 [多]文件输入中选择的文件的最大数量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-25 15:47