ajax(get,post) 文件流下载word、Excel和Zip 文件名自定义

import ElementUI from 'element-ui';  // 依赖ElementUI

// url:接口地址 params(POST): 参数 method:请求方式 name:下载文件名称 states:下载文件格式 1-xlsx 2-doc 3-zip

export function down(url, params, method, name, states) {

    let Loading;

    Loading = ElementUI.Loading.service({

        fullscreen: true,

        text: '数据处理中,请稍后!!!'

    })

    //默认登录token

    let token = window.localStorage.getItem('token')

    if (method == 'get') {

        var xhr = new XMLHttpRequest();

        xhr.open('GET', url, true);        // 也可以使用POST方式,根据接口

        xhr.responseType = "blob";    // 返回类型blob

        xhr.setRequestHeader("token", token);

        // 发送ajax请求

        xhr.send()

        xhr.onload = function () {

            // 请求完成

            if (this.status == 200) {

                // 返回201

                if (this.response.size < 150) {

                    Loading.close()

                    // 暂无数据

                    return false

                }

                var blob = this.response;

                var reader = new FileReader();

                reader.readAsDataURL(blob);    // 转换为base64,可以直接放入a标签href

                reader.onload = function (e) {

                    // 转换完成,创建一个a标签用于下载

                    var a = document.createElement('a');

                    if (states == 1) {

                        a.download = name + '.xlsx';

                    } else {

                        a.download = name + '.doc';

                    }

                    a.href = e.target.result;

                    // 修复firefox中无法触发click

                    a.click();

                }

                Loading.close()

            } else {

                Loading.close()

                ElementUI.$message.error('导出文件失败,请联系管理人员')

            }

        };

    } else {

        var xhr = new XMLHttpRequest();

        xhr.open('POST', url, true);     // 也可以使用POST方式,根据接口

        xhr.responseType = "blob";    // 返回类型blob

        xhr.setRequestHeader("token", token);

        xhr.onload = function () {

            // 请求完成

            if (this.status == 200) {

                // 返回201

                if (this.response.size < 150) {

                    Loading.close()

                     // 暂无数据

                    return false

                }

                var blob = this.response;

                var reader = new FileReader();

                reader.readAsDataURL(blob);    // 转换为base64,可以直接放入a标签href

                reader.onload = function (e) {

                    // 转换完成,创建一个a标签用于下载

                    var a = document.createElement('a');

                    if (states == 1) {

                        a.download = name + '.xlsx';

                    }

                    if (states == 2) {

                        a.download = name + '.doc';

                    }

                    if (states == 3) {

                        a.download = name + '.zip';

                    }

                    a.href = e.target.result;

                    // 修复firefox中无法触发click

                    a.click();

                }

                Loading.close()

            } else {

                Loading.close()

                ElementUI.$message.error('导出文件失败,请联系管理人员')

            }

        };

        xhr.setRequestHeader('Content-type', 'application/json')

        // 发送ajax请求

        xhr.send(JSON.stringify(params))

    }

}

https://www.jianshu.com/p/830278a058d2 优化版本未测试

你可能感兴趣的:(ajax(get,post) 文件流下载word、Excel和Zip 文件名自定义)