美文网首页
axios使用POST下载excel文件

axios使用POST下载excel文件

作者: 山上有桃子 | 来源:发表于2021-08-24 11:17 被阅读0次

    使用axios.post(url,data,params)向后台请求excel流文件

    /**
     * 处理返回的excel文件流
     */
    export function exportExcel(res,name='统计') {
        const blob = new Blob([res.data]);
        const fileName = name + '.xlsx';
        const elink = document.createElement('a');
        elink.download = fileName;
        elink.style.display = 'none';
        elink.href = URL.createObjectURL(blob);
        document.body.appendChild(elink);
        elink.click();
        URL.revokeObjectURL(elink.href); // 释放URL 对象
        document.body.removeChild(elink);
    }
    
    export default {
        methods:{
            /**
             * 导出
             */
            downloadExcel(){
                let data = {};
                this.axios2.post('/testDownExcelUrl',data,{
                    responseType:'blob',
                    header:{
                        'Content-Type':'application/json;charset=UTF-8',
                    }
                }).then(res => {
                    exportExcel(res,'我的账单');
                })
    
            },
        }
    }
    

    如果配置了axios响应拦截器,改变了返回值结构,需要判断responseType == "blob" 来根据自己需要返回对应的数据结构。

    // axios 相应拦截器
    axios.interceptors.response.use(
        response => {
            if (response.config.responseType == "blob") { //返回类型为流形式的文件
                if (response.status === 200) {
                    return response
                } else {
                    return Promise.reject(new Error('请求异常'));
                }
            } else {
                let res = response.data
                if (res.code === 1) {
                    return response.data
                } else {
                    Message({
                        message: res.message,
                        type: "error",
                        duration: 5 * 1000
                    });
                    return Promise.reject(new Error(res.message||'请求异常'));
                }
            }
        },
        error => {
            Message({
                message: error.message,
                type: "error",
                duration: 5 * 1000
            });
            return Promise.reject(error)
        }
    );
    

    相关文章

      网友评论

          本文标题:axios使用POST下载excel文件

          本文链接:https://www.haomeiwen.com/subject/kjkdiltx.html