前端 h5 文件下载重命名

本文记录了在前端实现从URL下载文件并重命名的解决方案。当使用download属性遇到跨域问题时,通过axios获取文件响应数据,转换为Blob对象,创建a标签并设置href和download属性,然后模拟点击实现下载。这种方法适用于前后端分离的项目,避免了文件名被替换为URL的情况。同时,文章提到后端直接返回文件流是更优的方案。
摘要由CSDN通过智能技术生成

最近有个需求,下载文件后文件名是url地址,重命名成文件原来的名字。

特此记录一下。

首先尝试一下a标签的download属性;

在这里插入图片描述
发现不生效后,百度一下发现 由于是前端端分离项目,href属性的地址必须是和你前端js非跨域的地址,不然download属性无效!

继续百度

发现很多办法都是利用 new Blob() 把文件转成blob文件对象,然后进行下载和保存,然而发现navigator.msSaveBlob方法不生效;(走过的坑就不说了,直接讲方法)

let link = document.createElement('a');
      axios.get(url,{
      	responseType: 'blob',// 不加type值下载文件后会出现乱码
      }).then(res=>{
        let blob = new Blob([res.data])
        let objectUrl = URL.createObjectURL(blob) // 创建URL
        link.href = objectUrl;
        link.download = i.cf_name?i.cf_name:''; // 自定义文件名
        link.click() // 下载文件
        URL.revokeObjectURL(objectUrl); // 释放内存
      })

这里呢是利用请求文件地址获取到的响应数据转换成 Blob 文件对象,然后创建一个a标签,吧 我们转换的数据当做 href地址,最最最重要的一步, 添加上download名称,随后自助点击事件(手动狗头)并释放内存即可;

其实我也不太明白这个原理是什么,请求到的文件url响应的是什么? 大佬们看到可以评论说一下~ 谢谢啦
(可以的话,直接后端转成文件流的方式是最好的,多学习一下也不坏)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值