/** * 導出文件方法 * @param {String} method [請求方式] * @param {String} url [請求的url地址] * @param {Object} params [請求時攜帶的參數] * @param {String} fileName [導出的文件名,例:test.xlsx] */ function DOWNLOAD(method="post",url, params, fileName) { return new Promise((resolve, reject) => { axios({ method: method, url: url, params: params, responseType: 'blob' }) .then(res => { let reader = new FileReader(); let data = res.data; reader.onload = e => { if (e.target.result.indexOf('Result') != -1 && JSON.parse(e.target.result).Result == false) { // 進行錯誤處理 } else { if (!fileName) { let contentDisposition = res.headers['content-disposition']; if (contentDisposition) { fileName = window.decodeURI(res.headers['content-disposition'].split('=')[2].split("''")[1], "UTF-8"); } } executeDownload(data, fileName); } }; reader.readAsText(data); resolve(res.data); }) }); } // 模擬點擊a 標簽進行下載 function executeDownload(data, fileName) { if (!data) { return } let url = window.URL.createObjectURL(new Blob([data])); let link = document.createElement('a'); link.style.display = 'none'; link.href = url; link.setAttribute('download', fileName); document.body.appendChild(link); link.click(); document.body.removeChild(link); }