问题描述:
直接给 FormData
append
一个数组的话会变成一个字符串,这样后台拿不到文件信息,如下:
const fd = new FormData();
fd.append('files', this.fileList);
console.log(fd.getAll('files'));
解决办法:
const fd = new FormData();
this.fileList.forEach(item => fd.append('files', item));
console.log(fd.getAll('files'));
参考:
MDN
FormData
接口的append()
方法 会添加一个新值到FormData
对象内的一个已存在的键中,如果键不存在则会添加该键。
FormData.set
和append()
的区别在于,如果指定的键已经存在,FormData.set
会使用新值覆盖已有的值,而append()
会把新值添加到已有值集合的后面。
跟常规表单数据一样,你可以使用同一个名称添加多个值 。例如 (为了与PHP命名习惯一致在名称中添加了[]):
formData.append('userpic[]', myFileInput1.files[0], 'chris1.jpg');
formData.append('userpic[]', myFileInput2.files[0], 'chris2.jpg');
这项技术使得多文件上传的处理更加简单,因为所得数据结构更有利于循环。