vue 原生js请求接口并下载文件三种方法axios fetch XMLHttpRequest

const row = this.handleEditRowData;
const Url = `http://`;
let fileName = '文件名';
let _this = this;
//1.axios
axios
  .get(Url, {
    responseType: "blob",
  })
  .then((res) => {
    //把文件内容转为转为blob对象 type默认为txt,其他格式需对应设置此处zip
    let blob = new Blob([res.data],{ type: 'application/zip' });
    let url = window.URL.createObjectURL(blob);
    //创建临时的a链接添加点击事件用于下载以下为a标签方法
    let a = document.createElement("a");
    a.href = url;
    a.download = fileName;
    a.click();
    //释放url
    window.URL.revokeObjectURL(url);
//之后的操作
  });
//发请求

//2.fetch
fetch(Url, {
      method: 'Get',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
      },
    }).then(res => {
      res.blob().then(blob => {
const blobUrl = window.URL.createObjectURL(blob);
const a = window.document.createElement('a');
a.href = Url;
a.download = fileName;
a.click();
    window.URL.revokeObjectURL(blobUrl);
 _this.directUpdate();
  });
});
//原生的XMLHttpRequest对象方法此处没有设置application格式 文件名后缀加zip一样效果
let xhr = new XMLHttpRequest();
xhr.open("GET", Url, true); // 也可以使用POST方式,根据接口
//写入请求头
    xhr.setRequestHeader("Content-type", "application/json")
xhr.responseType = "blob";
xhr.onprogress = function (event) {};
xhr.onload = function () {
  if (this.status === 200) {
    let content = this.response;
    let aTag = document.createElement("a");
  let blob = new Blob([res.data],{ type: 'application/zip' });
    aTag.download = fileName;
    aTag.href = URL.createObjectURL(blob);
    aTag.click();
    URL.revokeObjectURL(blob);
    loading.close();
    _this.directUpdate();
  }
};
xhr.send()
//不写请求头·可以在文件名后加 '.zip'

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值