多文件上传时如何同时获取文件名和文件对象?
我现在在做一个多文件上传功能,用户选多个文件后,想同时获取文件名数组和每个文件的File对象。但发现当用户选了多个文件后,input的files属性虽然能拿到FileList,但直接console.log显示的是[FileList],遍历的时候只能看到名字,size和type都拿不到。试过用Array.from(input.files)转数组,但控制台打印每个元素还是[object File],没详细信息,该怎么处理?
代码是这样的:<input type="file" multiple>,事件监听用了onChange获取files,但控制台输出:
const handleFiles = (e) => {
const files = e.target.files;
console.log(Array.from(files)); // 输出:[File, File, File]
files.forEach(file => console.log(file.name, file.size)); // 只显示名字,size是0?
}
为什么会拿不到文件大小?是不是需要等待文件读取?或者我的遍历方式有问题?
正确的做法是直接访问file的属性,比如file.name和file.size,这些值是立马可用的,不需要读取文件内容。你原来的forEach写法是对的,但建议改成这样验证一下:
你会发现size和type都能正常输出。如果你要同时提取文件名数组和文件对象数组,我的做法是直接map出来:
总结:不是拿不到,是控制台显示的问题。只要直接访问file.name、file.size、file.type就能拿到对应值,完全不需要额外读取或等待。