Javascript从具有多个属性的文件输入元素中获取文件数量及其文件名?

IT技术 javascript
2021-01-18 18:03:46

我有一个带有multiple="multiple"属性的文件输入,允许用户一次选择多个文件。我想在上传之前显示选定的文件名及其计数,但是我不确定如何使用 javascript 从文件输入元素中获取此信息?

<input type="file" id="fileElementId" name="files[]" size="20" multiple="multiple" />

我试过这个:

document.getElementById('fileElementId').value

但是当我选择多个文件时,这只返回一个文件名。使用 JavaScript 如何从具有multiple属性的文件输入元素中检索所选文件的数量及其名称

3个回答

在支持 HTML5 文件内容的新浏览器中,您的<input>元素将具有“文件”属性。这会给你一个“FileList”引用,它有一个“.length”属性。在“FileList”实例上还有一个称为“.item()”的访问方法,它需要一个整数参数来访问单个“File”元素。那些有一个“.name”属性。

所以:

var inp = document.getElementById('fileElementId');
for (var i = 0; i < inp.files.length; ++i) {
  var name = inp.files.item(i).name;
  alert("here is a file name: " + name);
}

这当然不适用于较旧的 IE 版本,我什至不确定 Safari 和 Chrome 支持有多彻底;但是,如果您在文件输入上设置了“多个”设置的页面,那么您已经在边缘跳舞了:-)

在 Firefox 3.6+、Chrome 2+、Safari 4+、Opera 11+ 等中的多个作品所以是的 - 除了 IE(甚至不是 IE9)的任何地方。对我来说,告诉人们升级他们的浏览器比通过修复 flash cookie 错误引入会话固定问题更容易,因为唯一可行的替代方案是 flash 上传器。
2021-03-24 18:03:46
FWIW 如果您需要文件的大小: fileSize=inp.files.item(i).size
2021-04-11 18:03:46
不过谢谢。这在 chrom、firefox、opera、safari 中对我有用。绝对是IE垃圾堆里惨败。:) 哈哈
2021-04-14 18:03:46

这是未经测试的,但您可以尝试:

    $('#fileElementId').get(0).files;

或者

    document.getElementById('fileElementId').files;
$('#fileElementId').get(0).files 它只返回对象。而是使用 $('#fileElementId').get(0).files.length。
2021-03-25 18:03:46
@lbu:我不明白为什么不会。主要的是 - “文件”元素属性。而且 - 是的 - 我检查过 - 它可以以 jquery 或原始方式工作。
2021-03-26 18:03:46
这是 7 年前的评论,不要让它使您失去动力。
2021-03-26 18:03:46
@Ibu 他可能没有时间测试它。如果你测试答案或欣赏答案,那就更好了,......不要让用户失去动力。
2021-03-30 18:03:46

第二个答案是错误的。

答案应该是document.getElementById('fileElementId').files.length;而不是document.getElementById('fileElementId').files;