后端下载Xlsx文件 二进制流

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) } }

 

posted @ 2021-06-23 11:46  谢玉胜  阅读(266)  评论(0编辑  收藏  举报
@allenXieyusheng