axios 的responseType 类型动态设置

问题描述:
使用vue.js 下载文件的时候,设置的类型是'Blob',axios请求接口下载,请求成功时返回的是一个流形式的文件,但是请求失败的时候返回的是json ,需要用默认的responseType: 'json'来处理错误信息,那么问题来了,我该怎么根据服务器响应后才设置这个responseType?

问题重现:
请求设置了responseType: 'Blob',
请求成功时,下载文件
请求失败时,后端返回json对象,如:{"msg":"系统异常","code":1,"success":false},也被转成了arraybuffer

解决办法:
 

api.downloadFile(params).then(res => {
        if (res.status === 200 && res.data) {
          var disposition = res.headers['content-disposition']
          var fileName = decodeURI(disposition.substring(disposition.indexOf('filename=') + 9, disposition.length))
          let blob = new Blob([res.data], { type: 'application/pdf' }) // 假设文件为pdf
          let link = document.createElement('a')
          link.href = window.URL.createObjectURL(blob)
          link.download = fileName
          link.click()
          link.remove()
        } else {
           // 其它情况
        }
      }).catch(err => {
          var enc = new TextDecoder('utf-8') 
          var res = JSON.parse(enc.decode(new Uint8Array(err.data))) //转化成json对象
          console.log(res)
      })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值