zoukankan      html  css  js  c++  java
  • 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 => {
    })
  • 相关阅读:
    经典的阿里前端笔试题
    Javascript之浏览器兼容EventUtil
    Javascript之对象的创建
    奇妙的CSS之CSS3新特性总结
    前端优化之无阻塞加载脚本
    正则表达式规则与常见的正则表达式
    全端工程师
    最全前端面试问题及答案总结--《转载》
    奇妙的CSS之布局与定位
    关于在django框架里取已登录用户名字的问题
  • 原文地址:https://www.cnblogs.com/jyughynj/p/15682358.html
Copyright © 2011-2022 走看看