记一个 FormData 多文件上传问题

版权声明:solo https://blog.csdn.net/sansan_7957/article/details/90209302

问题描述:

直接给 FormData append 一个数组的话会变成一个字符串,这样后台拿不到文件信息,如下:

const fd = new FormData();
fd.append('files', this.fileList);
console.log(fd.getAll('files'));

fd.append('files', this.fileList);

解决办法:

const fd = new FormData();
this.fileList.forEach(item => fd.append('files', item));
console.log(fd.getAll('files'));

this.fileList.forEach(item => fd.append('files', item));

参考:

MDN

FormData 接口的append() 方法 会添加一个新值到 FormData 对象内的一个已存在的键中,如果键不存在则会添加该键。

FormData.setappend() 的区别在于,如果指定的键已经存在, FormData.set 会使用新值覆盖已有的值,而 append() 会把新值添加到已有值集合的后面。

跟常规表单数据一样,你可以使用同一个名称添加多个值 。例如 (为了与PHP命名习惯一致在名称中添加了[]):

formData.append('userpic[]', myFileInput1.files[0], 'chris1.jpg');
formData.append('userpic[]', myFileInput2.files[0], 'chris2.jpg');

这项技术使得多文件上传的处理更加简单,因为所得数据结构更有利于循环。

猜你喜欢

转载自blog.csdn.net/sansan_7957/article/details/90209302