前端二进制流自定义文件名下载文件

1,191 阅读1分钟

前言


关于下载文件无法重命名文件名的需求反反复复做了很多次,今天终于解决,所以特来记录一下。关于下载文件,h5a标签的download属性不生效,这个是因为跨域问题,百度一大推这里就不做论述了,我这里讲讲通过BLOB二进制流方式下载文件。

正文


简单来说就是通过吧文件转换成二进制BLOB对象,然后通过js创建一个a标签来下载。

1615876097(1).jpg

我这里用的axios,通过responseType设置为BLOB返回BLOB对象来下载文件。

1615876316(1).jpg

1615876347(1).jpg

成功!

划重点! new Blob创建实例的时候 千万记得加TYPE,不然下载文件全部会转换成txt格式的文件。

这里放代码 ~ 对你有用请麻烦点个赞哦 谢谢啦~

let link = document.createElement('a'); axios.get(url.qn_url,{ responseType: 'blob', }).then(res=>{ console.log(res) let blob = new Blob([res.data]) let objectUrl = URL.createObjectURL(blob) // 创建URL link.href = objectUrl; console.log(link) link.download = url.df_name; // 自定义文件名 link.click() // 下载文件. URL.revokeObjectURL(objectUrl); // 释放内存 })