axios使用POST下载excel文件

使用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文件)