当前位置: 代码网 > it编程>编程语言>Javascript > vue中axios利用blob实现文件浏览器下载方式

vue中axios利用blob实现文件浏览器下载方式

2024年06月11日 Javascript 我要评论
vueaxios利用blob实现文件浏览器下载在vue中,使用axios向后台请求数据,但只接收返回的response并不能实现浏览器下载,所以需要借助于blob实现文件的浏览器下载,分为两种情况,一

vue axios利用blob实现文件浏览器下载

在vue中,使用axios向后台请求数据,但只接收返回的response并不能实现浏览器下载,所以需要借助于blob实现文件的浏览器下载,分为两种情况,一种是get请求,使用params,另一种使用post请求,参数使用formdata传参

情景1:get请求,params传参

url与参数部分代码:

this.axios.get('/api/downloadconfig', {
   params:{oid:oid},
   responsetype:'blob',
 })

blob具体下载实现代码

 if(res.status === 200){
  const content = res.data;
  const blob = new blob([content]);
  if('download' in document.createelement('a')){
    //非ie下载
    const a = document.createelement('a');
    a.download = filename;
    a.style.display = 'none';
    a.href = window.url.createobjecturl(blob);
    document.body.appendchild(a);
    a.click();
    window.url.revokeobjecturl(a.href);
    document.body.removechild(a);
  }else{
    //ie10+下载
    if(typeof window.navigator.mssaveblob !== 'undefined'){
      window.navigator.mssaveblob(blob, _this.selected);
    }else{
      let url = window.url || window.webkiturl;
      let downloadurl = url.createobjecturl(blob);
      window.location = downloadurl;
  }
 }

情景2:post请求,formdata传参

url与参数部分代码:

this.axios.post('/api/downloadconfig', form, {responsetype:'blob'})

blob具体下载实现代码与上文get请求一致

vue axios实现下载文件及responsetype:blob注意事项

需要使用axios和js-file-download组件

npm install js-file-download --save
npm install axios --save
import filedownload from 'filedownload'; // 引入filedownload
import axios from 'axios'; // 引入axios 
 
axios({
    method: 'get',
    url: 'xxxxxxx',
    responsetype: 'blob'
}).then(res => {
    if(res.status == 200){
      // res.headers['content-disposition'].substring(20)表示从响应头中获取文件名
      filedownload(res.data,res.headers['content-disposition'].substring(20));
    }else { // 下载文件失败,解析json格式信息
      let that = this;
      var filereader = new filereader();
      filereader.readastext(res.data); // 按字节读取文件内容,结果为文件的二进制串
      filereader.onload = ()=>{
          that.$notify.error(filereader.result);
      }
    } 
})

注意事项:

responsetype:blob表示服务器返回的响应类型是二进制流,一般用于文件、视频下载等场景。

正常情况下后端返回二进制数据,当后端服务器出错时,往往会以json形式返回错误信息,例如{"code":500,"msg":"未知异常"}。

因为设置了blob类型,axios会强制把数据转为blob,导致json格式的响应没办法正常解析,需要使用filereader对象来处理,filereader是一种异步读取文件机制。

filereader提供了如下方法,大家根据需要自行选择。

  • readasarraybuffer(file):按字节读取文件内容,结果用arraybuffer对象表示
  • readasbinarystring(file):按字节读取文件内容,结果为文件的二进制串
  • readasdataurl(file):读取文件内容,结果用data:url的字符串形式表示
  • readastext(file,encoding):按字符读取文件内容,结果用字符串形式表示

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com