下载文件如果url指向同源资源,是正常的。如果url指向第三方资源,download会失效,表现和不使用download时一致——浏览器能打开的文件,浏览器会直接打开,不能打开的文件,会直接下载。浏览器打开的文件..._a标签href可以直接下载,但是通过download下载显示跨域">
赞
踩
1.通过点击下载多媒体文件(图片/视频/文件等)
最简单的方式:
<a href='url' download="filename.ext">下载文件</a>
如果url指向同源资源,是正常的。
如果url指向第三方资源,download会失效,表现和不使用download时一致——浏览器能打开的文件,浏览器会直接打开,不能打开的文件,会直接下载。浏览器打开的文件,可以手动下载。
解决方案一:将文件打包为.zip/.rar等浏览器不能打开的文件下载。
解决方案二:通过后端转发,后端请求第三方资源,返回给前端,前端使用file-saver等工具保存文件。
如果url指向的第三方资源配置了CORS,download属性无效,但可以获取文件下载到本地,无法修改修改文件名。
2.解决方法
1. 借助HTML5 Blob实现文本信息文件下载
- const downloadRes = async (url, name) => {
- let response = await fetch(url)
- // 内容转变成blob地址
- let blob = await response.blob()
- // 创建隐藏的可下载链接
- let objectUrl = window.URL.createObjectURL(blob)
- let a = document.createElement('a')
- //地址
- a.href = objectUrl
- //修改文件名
- a.download = name
- // 触发点击
- document.body.appendChild(a)
- a.click()
- //移除
- setTimeout(() => document.body.removeChild(a), 1000)
- }
2.图片格式
如果我们想下载一张图片,可以把这张图片转换成base64格式,然后下载。
- export const downloadImg = async (url, name) => {
- var canvas = document.createElement('canvas'),
- ctx = canvas.getContext('2d'),
- img = new Image();
- img.crossOrigin = 'Anonymous';
- img.onload = function() {
- canvas.height = img.height;
- canvas.width = img.width;
- ctx.drawImage(img, 0, 0);
- var dataURL = canvas.toDataURL('image/png');
- let a = document.createElement('a');
- a.href = dataURL;
- a.download = name;
- document.body.appendChild(a);
- a.click();
- setTimeout(() => {
- document.body.removeChild(a);
- canvas = null;
- }, 1000);
- };
- img.src = url;
- };
如果还是不行,就把网络地址的图片转成base64格式的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。