vue element upload组件配合axios实现用 “Content-Type“: “multipart/form-data“上传方式导入xls文件

简介: vue element upload组件配合axios实现用 “Content-Type“: “multipart/form-data“上传方式导入xls文件


<!-- 导入---------------------------------------- -->
<!--注意:action属性是必填项了,这里要加上去,只是在上传过程会报一个错-->
<el-upload
    action
    :show-file-list="false"
    :headers="headers" 
    :action="actionUrl" 
    :before-upload="beforeFileUpload"
    :disabled="percent < 100"
>
    <el-button
            type="success"
            icon="el-icon-upload"
            :loading="percent < 100"
    >{{ 100 > percent ? percent + "%" : "导入" }}</el-button>
    
</el-upload>
 
<!-- ---------------------------------------- -->
 
样式_________________________________________________________
 
// 上传按钮禁用状态----------------------------------------
>>>.el-upload {
    cursor: not-allowed;
}
 
data() {
  return {
    // 上传----------------------------------------
    headers: {
          token: localStorage.token, //获取token(注意仔细看后端接受token的字段名是不是叫做“token”)
    },
    actionUrl: "https://xxx.com/import",
    fmt: ["xls", "xlsx"],
    dur: 100,
    percent: 100,
    // ----------------------------------------
},
methods: {
    // 上传文件----------------------------------------------------------------
    showFakeLoading() {
        this.interval && clearInterval(this.interval);
        this.percent = 0;
        this.interval = setInterval(() => {
            this.percent++;
            this.percent >= 99 && clearInterval(this.interval);
        }, this.dur);
    }
    ,
    hideFakeLoading() {
        this.interval && clearInterval(this.interval);
        this.percent = 100;
    },
    //文件上传之前
    beforeFileUpload(file, id) {
        // 判断是不是特定的格式________________________
        let isFile = this.fmt.includes(file.name.toLocaleLowerCase().split(".").pop());
        const maxSize = 50; //限制大小
        const isAllowSize = file.size / 1024 / 1024 <= maxSize;
        isFile || this.$message.error("上传文件只能是" + this.fmt + "格式");
        isAllowSize || this.$message.error("上传文件大小不能超过" + maxSize + "MB");
        let allowUpload = isFile && isAllowSize;
        allowUpload && this.showFakeLoading(); //虚假加载
 
        if (allowUpload) {
            // 为了实现form-data方式上传文件----------------------------------------
            let formData = new FormData();
            formData.append("file", file);//注意这个位置的一般后端会用file,一般情况不要修改
            this.$axios
                .post(this.actionUrl, formData, {
                    headers: {"Content-Type": "multipart/form-data"}
                })
                .then((d) => {
                    this.$message.success(`文件“${file.name}”导入成功`);
                    this.hideFakeLoading();//停止加载
                    this.initList();//刷新列表
                })
                .catch((d) => {
                    this.$message.error("文件导入失败,请稍后再试!");
                    console.log(d);
                });
            // ----------------------------------------
        }
 
        return allowUpload; //若返回 false则停止上传
    }
}


相关文章
|
8天前
|
JSON JavaScript 前端开发
< 每日份知识快餐:axios是什么?如何在Vue中 封装 axios ? >
本文介绍了前端开发中常用的HTTP客户端库Axios,它基于Promise,支持浏览器和Node.js,特点是功能强大、支持Promise API和并发请求,并能拦截请求和响应。文章强调了理解Axios的内部原理和优化使用的重要性,不仅讲解了基本的安装、导入和使用方法,还阐述了为何选择Axios,包括其丰富的配置选项和良好的浏览器支持。此外,文章探讨了封装Axios的必要性,以减少重复代码和提高代码维护性,并给出了设置接口请求前缀、请求头、超时时间以及封装请求方法和拦截器的示例。通过封装,开发者可以更高效地管理和使用Axios,适应不同项目需求。
|
14天前
|
JSON 前端开发 JavaScript
Vue+Axios+SpringBoot后端同时接收文件和json作为请求参数
Vue+Axios+SpringBoot后端同时接收文件和json作为请求参数
25 0
|
22天前
|
前端开发 应用服务中间件 nginx
Vue+SpringBoot+Axios的跨域问题
Vue+SpringBoot+Axios的跨域问题
17 0
|
23天前
|
JavaScript
vue封装axios(用interceptors封装)
vue封装axios(用interceptors封装)
13 0
|
23天前
|
JSON 前端开发 JavaScript
3分钟让你学会axios在vue项目中的基本用法(建议收藏)
3分钟让你学会axios在vue项目中的基本用法(建议收藏)
48 0
|
2月前
|
XML JavaScript 前端开发
axios如何在vue中使用
axios如何在vue中使用
29 1
|
23天前
|
JavaScript 数据格式
Vue axios请求拦截和相应拦截
Vue axios请求拦截和相应拦截
14 2
|
23天前
|
JavaScript API
Vue中axios拦截器怎么使用
Vue中axios拦截器怎么使用
|
1月前
|
Web App开发 前端开发 JavaScript
Spring Boot整合 mybatisplus(后端) Vue+echarts+Element UI+axios(前端)---前后端项目实例demo
Spring Boot整合 mybatisplus(后端) Vue+echarts+Element UI+axios(前端)---前后端项目实例demo
27 1
|
1月前
|
前端开发 JavaScript Java
springboot+mybatis plus+vue+elementui+axios 表格分页查询demo
springboot+mybatis plus+vue+elementui+axios 表格分页查询demo
33 0