用户点击下载多媒体文件(图片/视频等),最简单的方式:
<a href='url' download="filename.ext">下载</a>
如果url指向第三方资源,download会失效,表现和不使用download时一致——浏览器能打开的文件,浏览器会直接打开,不能打开的文件,会直接下载。浏览器打开的文件,可以手动下载。
解决方案一:将文件打包为.zip/.rar等浏览器不能打开的文件下载。
解决方案二:通过后端转发,后端请求第三方资源,返回给前端,前端使用file-saver等工具保存文件。
如果url指向的第三方资源配置了CORS,download依然无效,但可以通过xhr请求获取文件,然后下载到本地。
/**
/**
第三方跨域多媒体资源无法直接下载。很奇怪,浏览器不能打开的文件可以下载,浏览器能打开的文件不能下载,这个限制似乎没有多大意义。
不依靠后端,有两个可能破解这个限制的思路。
1、window.open(url),再向新窗口写入一个,触发点击。
验证结果:这种向别人的网页中嵌入自己内容的方式,极大影响浏览器的安全,无法实现。
2、, onload的回调中,将img 绘入 canvas,canvas.toDataUrl(),然后保存。
MDN给出的例子 使用download保存画布为png
验证结果:canvas.drawImage(img,0,0)后,canvas被跨域资源污染,canvas.toDataUrl()调用报错。
/**
浏览器已经限制死跨域下载多媒体文件的各种方式。
最正规的办法还是让后端做一次转发。请求后端,后端向第三方请求文件,返回给前端,前端保存文件。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有