axios同时上传多个文件

一个很普通的场景,前端一次性选择多个文件上传到后端。

需要注意的是使用FormData.append把多个文件添加到一个键上,设置请求header的content-type为mutilpart/form-data

先说正确的步骤:

1.前端使用input标签配合oncahnge事件获取文件

1 <input type="file" name="file" id="file" multiple/>
1 let file = document.getElementById("file");
2 file.addEventListener("change", (event) => {
3     console.info(event.target.files); // 获取文件
4 });

2.使用FormData结合axios向后端发送请求

 1 let files = event.target.files;
 2 let formData = new FormData();
 3 files = Array.from(files); // files是类数组,需要先转为数组
 4 files.forEach((file) => {
 5     formData.append("file", file);
 6 });
 7 axios
 8     .post(url, formData, {
 9         headers: { "Content-Type": "multipart/form-data" }
10     })
11     .then(console.info)
12     .catch(console.error);

3.后端使用MutilpartFile []file接收多个文件

file参数对应前端FormData中存放文件的键file。

注意事项:

1.向后端传递文件类型的参数,需要把文件放入formData中,FormData使用键值对存放数据,如formData.set("key", value);value的类型只能是string、boolean、blob;

直接向FormData中存放数组和对象是无效的,那么多个文件是不能用set放在一个键上的,可以使用FormData.append方法,该方法也是接收键值对,但是可以多次向一个键上添加数据,后面的不会覆盖前面的,而是组合成一个list。

2.input.files是类数组,如果迭代files可以先用Array.from转为数组。

3.向后端发请求传递文件时需要设置header的content-type为multipart/form-data。

axios配置的优先级:

1.   在lib.default.js找到的库的默认值
2.   然后是全局的defaults配置
axios.default.baseURL = "https://jsonplaceholder.typicode.com"
3.   然后是实例的defaults属性
const instance = axios.create({   
});
4.   最后是请求的config参数
instance.get(url, config).then(res => {
})
原文地址:https://www.cnblogs.com/jyughynj/p/15682358.html