二进制文件导出

 let exportExcel = function (apiUrl, postData, downloadFileName, headers, cb) {
        //apiUrl, postData, downloadFileName, headers, cb(传参说明:接口路径,接口传参,下载文件名,头部信息,回调函数)
        (typeof postData !== 'string') && (postData = JSON.stringify(postData));
        downloadFileName || (downloadFileName = '下载文件.xlsx');//如果.xlsx无法打开就改为.xls后缀名
        let xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLDOM');
        xhr.open('POST', apiUrl, true);
        xhr.responseType = 'blob';
        // 这里的header内容根据具体业务来调整参数:
        xhr.setRequestHeader('cookie', '你的cookie');
        xhr.setRequestHeader('sessionId', '你的sessionId');
        // ----------------------------------------
        xhr.onreadystatechange = function () {
 
            if (xhr.readySsate === 4) {
                if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {
                    cb && cb(true);//下载成功
                    let blobData = xhr.response;
                    let reader = new FileReader();
                    reader.readAsDataURL(blobData), reader.onload = function (e) {
                        let a = document.createElement('a');
                        a.download = downloadFileName, a.href = blobData.size < 32767 ? e.target.result : URL.createObjectURL(blobData), a.click();
                    };
                } else {
                    cb && cb(false);//下载失败
                }
            } else {
                cb && cb(false);//下载失败
            }
 
        };
    };
 
//调用方法:exportExcel(接口路径,接口传参,下载文件名,头部信息,回调函数)

你可能感兴趣的:(vue项目中常用操作,前端,javascript,开发语言)