前端-a标签实现下载功能
最近在一个项目中需要实现下载功能,在前期与后端多次联调尝试使用接口下载文件无果后,最后抱着试一试的心态使用了A标签下载,方法是有效的,但是有部分局限性!!!
使用a标签实现下载的步骤如下:
-
Download(url, title, artist) {
-
const eleLink = document.createElement("a"); // 新建A标签
-
eleLink.href = url; // 下载的路径
-
eleLink.download = `${title} - ${artist}`; // 设置下载的属性,可以为空
-
eleLink.style.display = "none";
-
document.body.appendChild(eleLink);
-
eleLink.click(); // 触发点击事件
-
document.body.removeChild(eleLink);
-
}
但是!!!!这个方法会有一个局限性!!!我们在使用a标签实现下载功能时,必须保证是在同源情况下,当发起请求的地址和所需下载文件的地址形成跨域情况时,此时A标签会形成跳转,而不是下载功能。
如果要实现使用a标签跨域下载,可以使用下面的方法:
使用XMLHttpRequest解决
可以发送跨域请求,在服务端允许的情况下;
支持发送和接收二进制数据;
新增formData对象,支持发送表单数据;
发送和获取数据时,可以获取进度信息;
可以设置请求的超时时间;
使用方法如下:
-
Download(url, title, artist) {
-
var x = new XMLHttpRequest();
-
x.open("GET", url, true);
-
x.responseType = 'blob';
-
x.onload = function () {
-
const url = window.URL.createObjectURL(x.response)
-
const eleLink = document.createElement("a");
-
eleLink.href = url;
-
eleLink.download = `${title} - ${artist}`;
-
eleLink.style.display = "none";
-
document.body.appendChild(eleLink);
-
eleLink.click();
-
document.body.removeChild(eleLink);
-
}
-
x.send();
-
},
是不是很简单~其实原理就是将文件转为blob文件流的形式,再下载。
当然了,前端下载文件的方式并不只有这一种,更多的还是通过请求实现下载功能,这种方法感觉还是查那么点意思,如果后续学到更好的下载方式,会在本篇博客中补充哦 ~ 欢迎大家一起讨论~
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbebhe
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01