前端vue3把二进制文件流转文件下载到浏览器

今天写了项目的时候,跟后端对下载文件的接口遇到了axios每次下载文件都会出现文件损坏的问题,后来磨了好久,换了fetch才得以解决,具体原因应该是:

  • fetch 号称是 AJAX 的替代品,在 ES6 中出现,使用了ES6 中的 promise 对象。Fetch 是基于 promise 设计的。
  • Fetch 的代码结构比起 ajax 简单多了, 参数有点像 JQuery ajax。 但是,一定要记住: fetch 不是 ajax的进一步封装,而是原生 JS , 没有使用 XMLHttpRequest 对象。
    下载文件一般有两种方式:
  • 一种是后端直接提供链接的方式,前端直接a标签跳转去下载
  • 第二种是后端提供二进制文件流

因为文件涉及到权限问题,所以使用了二进制的方式下载文件
这里目前只能使用fetch,不知道有没有其他方法
直接贴代码吧:

const file = ()=>{
    let url='';
    fetch(url, {
        method: "get",
        headers: { "token": getCookie("token") },
        }).then(res=>res.blob()).then((res) => {
            const a = document.createElement('a');
            document.body.appendChild(a);
            a.style.display = 'none';
            // 指定下载路径
            const url = window.URL.createObjectURL(res);
            a.href = url;
            a.download = 'aaa.zip';
            a.click();
            // 移除a标签和url对象
            document.body.removeChild(a);
            window.URL.revokeObjectURL(url);
    })
}

如果解决了你的问题,记得点赞哦,哈哈哈

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值