後端下載Xlsx檔案 二進位制流
阿新 • • 發佈:2021-06-23
1. 首先返回頭需要設定:options.responseType = 'blob'
其他方式和post格式相同
例子:
postDownload (url, data, params, headers,) { let options = {} if (params) { options.params = params } if (headers) { options.headers = headers } options.responseType = 'blob' return axios.post(url, data, options) },
2. 通過介面請求後
檔名稱一般從返回header去取的
然後建立臨時的url 模擬點選效果進行下載操作
//將二進位制流轉為blob
const blob = new Blob([response.data], { type: 'application/octet-stream' })
if (typeof window.navigator.msSaveBlob !== 'undefined') { // 相容IE,window.navigator.msSaveBlob:以本地方式儲存檔案 window.navigator.msSaveBlob(blob, decodeURI(filename)) }else { // 建立新的URL並指向File物件或者Blob物件的地址 const blobURL = window.URL.createObjectURL(blob) // 建立a標籤,用於跳轉至下載連結 const tempLink = document.createElement('a') tempLink.style.display = 'none' tempLink.href = blobURL tempLink.setAttribute('download', decodeURI(filename)) // 相容:某些瀏覽器不支援HTML5的download屬性 if (typeof tempLink.download === 'undefined') { tempLink.setAttribute('target', '_blank') } // 掛載a標籤 document.body.appendChild(tempLink) tempLink.click() document.body.removeChild(tempLink) // 釋放blob URL地址 window.URL.revokeObjectURL(blobURL) } }