当前位置: 代码网 > it编程>编程语言>Javascript > Vue如何实现将后端返回二进制文件在浏览器自动下载

Vue如何实现将后端返回二进制文件在浏览器自动下载

2024年11月25日 Javascript 我要评论
一、关键代码export function downloadfile(filename) { axios({ method: 'post', url: process.env.vue_a

一、关键代码

export function downloadfile(filename) {
  axios({
    method: 'post',
    url: process.env.vue_app_base_api + '/cgi-bin/file',
    data: {
      'x-token': gettoken(),
      method: 'download',
      data: {
        filename: filename
      }
    },
    responsetype: 'blob'
  }).then((res) => {
    const blob = new blob([res.data], { type: 'application/octet-stream;charset=utf-8' }); // 将二进制流转为blob
    const a = document.createelement('a');
    const url = window.url.createobjecturl(blob); // 创建新的url并指向file对象或blob对象的地址
    a.href = url;
    a.download = filename; // 设置下载文件名
    a.style.display = 'none'; //避免数据量过大,下载时间长,看到a标签
    document.body.appendchild(a);
    a.click();//关键;调用点击事件,(模拟a标签的点击下载效果)
    document.body.removechild(a); // 下载完成移除元素
    window.url.revokeobjecturl(url); // 释放内存
  });
}

二、实现逻辑

首先,整个下载逻辑执行有以下几步:

1.前端发起请求拿到后端返回的二进制格式的数据;

2.将请求响应体中的二进制目标数据转行为blob类型的数据;

3.创建一个a标签,后续的自动下载的关键功能就是利用a.click()实现;

4.利用window.url.createobjecturl(blob)方法,利用第二步转换的blob数据创建出一个url,并赋值给第三步创建的a标签的href属性;

5.利用document.body.appendchild(a)将a标签添加到body标签中,后执行a.click()实现文件下载;

6.下载完成后,要移除a标签,使用代码document.body.removechild(a)实现;

7.释放第四步创建的url地址内存;

8.整个下载流程结束。

三、代码解读

如上图,封装了下载文件的函数,其中axios网络请求的编写根据你实际后端定的接口来写,主要目的就是拿到后端返回的二进制数据。其中filename,是当前请求一个参数,同时也作为后续要用到的文件名。需要注意的是,请求的responsetype:"blob"。

二进制格式数据转行blob数据类型的代码;

 const blob = new blob([res.data], { type: 'application/octet-stream;charset=utf-8' }); // 将二进制流转为blob

创建a标签;创建url地址;给a标签href属性赋值url地址;执行点击操作;最后移除a标签 释放url内容。

 const a = document.createelement('a');
 const url = window.url.createobjecturl(blob); // 创建新的url并指向file对象或blob对象的地址
 a.href = url;
 a.download = filename; // 设置下载文件名
 a.style.display = 'none'; //避免数据量过大,下载时间长,看到a标签
 document.body.appendchild(a);
 a.click(); //关键;调用点击事件,(模拟a标签的点击下载效果)
 document.body.removechild(a); // 下载完成移除元素
 window.url.revokeobjecturl(url); // 释放内存

以上就是vue如何实现将后端返回二进制文件在浏览器自动下载的详细内容,更多关于vue浏览器自动下载的资料请关注代码网其它相关文章!

(0)

相关文章:

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

发表评论

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