美文网首页vue
vue使用axios使用二进制流下载文件

vue使用axios使用二进制流下载文件

作者: 司大明明 | 来源:发表于2018-06-11 10:51 被阅读2948次

    背景

    axios 是个轻量级的 http 客户端,vue项目中使用非常普遍,现在需要对接一个excel下载接口,发现 axios 无法直接直接下载下来,也就是说用 axios 请求,返回的结果是二进制文件,但是浏览器没有直接下载下来,下面是解决的方案的代码片段。当然也适用于其他二进制文件下载。

    详细可查看 Axios 中文文档


    应用

    exportData () {
            const form = this.getSearchForm() // 要发送到后台的数据
            axios({ // 用axios发送post请求
              method: 'post',
              url: '/user/12345', // 请求地址
              data: form, // 参数
              responseType: 'blob' // 表明返回服务器返回的数据类型
            })
              .then((res) => { // 处理返回的文件流
                const content = res
                const blob = new Blob([content])
                const fileName = '测试表格123.xls'
                if ('download' in document.createElement('a')) { // 非IE下载
                  const elink = document.createElement('a')
                  elink.download = fileName
                  elink.style.display = 'none'
                  elink.href = URL.createObjectURL(blob)
                  document.body.appendChild(elink)
                  elink.click()
                  URL.revokeObjectURL(elink.href) // 释放URL 对象
                  document.body.removeChild(elink)
                } else { // IE10+下载
                  navigator.msSaveBlob(blob, fileName)
                }
            })
          }
    

    这里用了Blob对象,上面的写法就是用从服务器接收到的文件流(content-type:application/octet-stream)创建了一个blob对象,并使用该blob 创建一个指向类型数组的URL,将该url作为a标签的链接目标,然后去触发a标签的点击事件从而实现表格下载。


    get请求也可以实现,后续增加。。。

    相关文章

      网友评论

        本文标题:vue使用axios使用二进制流下载文件

        本文链接:https://www.haomeiwen.com/subject/iubceftx.html