vue实现文件流文件导出

本文介绍了在Vue项目中如何处理后台返回的文件流以实现Excel文件导出,同时解决了跨域问题。关键步骤包括将文件流转换为Blob对象,创建本地URL,然后利用a标签模拟下载。在请求接口时设置responseType: blob,并通过Vue代理解决跨域。最终,通过设置a标签属性并触发点击来下载文件。
摘要由CSDN通过智能技术生成

vue实现文件流文件导出


场景:实现execl文件导出

前端工作:根据后台返回的文件流,导出execl文件

遇到的主要问题:1.出现跨域(注:这里后台其实已经实现所有接口可跨域,但是不知道为啥还是出现了跨域)2.生成的href地址未赋值到a标签上

整体解决思路:
    a标签加href地址具备下载共功能。
    所以这里出现第一个目标:根据文件流在本地实现下载地址。
    主要用到了俩个知识点:

  1. new Blob(), 利用Blob构造函数,把返回的文件流转为blob对象
  2. 利用URL.createObjectURL(第一点生成的blob对象),生成本地url

具体代码

const blob = new Blob([res]); //res为后台返回的文件流,注意参数是以数组的形式上传
const href = URL.createObjectURL(blob); //URL都要大写,这点也要注意
const link = document.createElement("a") //生成a标签用于模拟下载
link.download = "test.xlsx"; //自定义下载文件名称
link.href = href //把生成的href赋值到a标签上,在这里我遇到一个问题,
//直接赋值无法把href赋值到a标签的href上(不知道是不是因为封装框架的问题)
//我采用了原生的方法
//link.setAttribute("href", href);
document.body.appendChild(link);
link.click();
//释放空间
document.body.removeChild("link");
URL.removeObjectURL(href);

注: 在请求后台接口时,在请求的接口中加入responseType: blob. 具体用法,responseType和headers同级。我这里还未弄清楚它的作用,希望万能的网友帮忙解释一下。

跨域问题最终通过vue代理进行解决,这里不再具体赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值