前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >HTML5 download属性无效的问题

HTML5 download属性无效的问题

作者头像
javascript.shop
发布于 2019-09-04 08:16:44
发布于 2019-09-04 08:16:44
5K00
代码可运行
举报
文章被收录于专栏:杰的记事本杰的记事本
运行总次数:0
代码可运行

用户点击下载多媒体文件(图片/视频等),最简单的方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a href='url' download="filename.ext">下载</a>

如果url指向第三方资源,download会失效,表现和不使用download时一致——浏览器能打开的文件,浏览器会直接打开,不能打开的文件,会直接下载。浏览器打开的文件,可以手动下载。

解决方案一:将文件打包为.zip/.rar等浏览器不能打开的文件下载。

解决方案二:通过后端转发,后端请求第三方资源,返回给前端,前端使用file-saver等工具保存文件。

如果url指向的第三方资源配置了CORS,download依然无效,但可以通过xhr请求获取文件,然后下载到本地。

/**

  • 用FileSave保存文件
  • @param url */ export function downloadUrlFile(url) { const xhr = new XMLHttpRequest(); xhr.open(‘GET’, url, true); xhr.responseType = ‘blob’; xhr.setRequestHeader(‘Authorization’, ‘Basic a2VybWl0Omtlcm1pdA==’); xhr.onload = () => { if (xhr.status === 200) { // 获取图片blob数据并保存 saveAs(xhr.response, ‘abc.jpg’); } }; xhr.send(); }

/**

  • URL方式保存文件到本地
  • @param name 文件名
  • @param data 文件的数据 */ function save(name, data) { var urlObject = window.URL || window.webkitURL || window; var export_blob = new Blob([data]); var save_link = document.createElementNS(‘http://www.w3.org/1999/xhtml’, ‘a’) save_link.href = urlObject.createObjectURL(export_blob); save_link.download = name; _fakeClick(save_link); }

第三方跨域多媒体资源无法直接下载。很奇怪,浏览器不能打开的文件可以下载,浏览器能打开的文件不能下载,这个限制似乎没有多大意义。

不依靠后端,有两个可能破解这个限制的思路。

1、window.open(url),再向新窗口写入一个,触发点击。

验证结果:这种向别人的网页中嵌入自己内容的方式,极大影响浏览器的安全,无法实现。

2、, onload的回调中,将img 绘入 canvas,canvas.toDataUrl(),然后保存。

MDN给出的例子        使用download保存画布为png

验证结果:canvas.drawImage(img,0,0)后,canvas被跨域资源污染,canvas.toDataUrl()调用报错。

/**

  • 下载url图片
  • @param imageUrl */ const downloadUrl = (imageUrl) => { const downloadCanvas = $(‘#download-canvas’)[0]; const img = new Image(); img.onload = () => { const ctx = downloadCanvas.getContext(‘2d’); ctx.drawImage(img, 0, 0); const imageDataUrl = downloadCanvas.toDataURL(‘image/jpeg’); // Uncaught DOMException: Failed to execute ‘toDataURL’ on ‘HTMLCanvasElement’: Tainted canvases may not be exported. saveAs(imageDataUrl, ‘附件’); }; img.src = imageUrl; }; 结论:

浏览器已经限制死跨域下载多媒体文件的各种方式。

最正规的办法还是让后端做一次转发。请求后端,后端向第三方请求文件,返回给前端,前端保存文件。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年1月23日2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用h5 <a>标签 href='url' download 下载踩过的坑
如果url指向第三方资源,download会失效,表现和不使用download时一致——浏览器能打开的文件,浏览器会直接打开,不能打开的文件,会直接下载。浏览器打开的文件,可以手动下载。
小蔚
2019/09/11
6.4K0
前端下载图片的N种方法
前几天一个简单的下载图片的需求折腾了我后端大佬好几天,最终还是需要前端来搞,开始说不行的笔者最后又行了,所以趁着这个机会来总结一下下载图片到底有多少种方法。
街角小林
2022/06/15
1.1K0
包含本地图片请点击word转存怎么解决_为什么会出现跨域问题
想必很多人在开发项目的时候都遇到过这种需求,就是将一个html一键转成word,然后发现无论如何都没法将界面中的图片给保存下来,其实这是因为图片存在跨域的问题,目前我的解决办法是自己的图片保存在 七牛云 中,就不会出现这个问题了。如何你存储到其他的地方,比如自己的服务器,可能就需要开放自己的跨域(自行解决),如果你的图片是外部连接,比如csdn,这样是没法保存的,csdn上的图片不支持跨域请求。
全栈程序员站长
2022/09/27
1.8K0
Vue(JavaScript)下载文件方式汇总
由于上面是方法会打开新的界面,所以我们需要对下载链接进行一些处理,比如转为blob格式:
十玖八柒
2022/08/01
2.5K0
html5中如何解决canvas图片跨域问题-canvas无法导入远程图片
今天我们来说说在开发中比较常谈及的问题,那就是跨域问题,我们就来说说在:“html5中如何解决canvas图片getImageData,toDataURL跨域问题?”这个问题吧!
超级小可爱
2023/11/08
2.7K0
html5中如何解决canvas图片跨域问题-canvas无法导入远程图片
JS实现保存当前网页HTML到本地(Chrom Firefox)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>网页HTML存本地</title> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script&gt; </head> <body> <a href="#">保存文件</a> <script> function fake_click(obj) { var ev = document.createEvent(
用户1503405
2021/09/23
6.8K1
你不知道的 Blob
如果你允许用户从你的网站上下载某些文件,那你可能会遇到 Blob 类型。为了实现上述的功能,你可以很容易从网上找到相关的示例,并根据实际需求进行适当的调整。对于部分开发者来说,在完成上述功能之后,他们并不会继续思考 Blob 是什么?
阿宝哥
2020/06/03
4.3K0
Chrome扩展 实现自动页面Video下载 demo
最近在看一些浏览器相关的知识,然后就看到了chrome扩展开发文档,觉得很有意思,就按照文档做了一个最简单的demo实现页面上video的自动下载。
4cos90
2022/02/09
1.4K0
探索如何将html和svg导出为图片
笔者开源了一个Web思维导图,在做导出为图片的功能时走了挺多弯路,所以通过本文来记录一下。
街角小林
2023/09/11
8970
探索如何将html和svg导出为图片
canvas保存图片的场景分析(附完整demo)
随着浏览器对的canvas的支持,业务上使用的范围也越来越广了。 以前前端需要下载图片时,需要后端在Content-Disposition: attatchment; filename="xx.png"的http头(nginx的配置方式可以直接 看最下面),现在用canvas也是可以实现的了。
用户2845596
2021/01/21
6950
JS 图片压缩
说起图片压缩,大家想到的或者平时用到的很多工具都可以实现,例如,客户端类的有图片压缩工具 PPDuck3, JS 实现类的有插件 compression.js ,亦或是在线处理类的 OSS 上传,文件上传后,在访问文件时中也有图片的压缩配置选项,不过,能不能自己撸一套 JS 实现的图片压缩代码呢?当然可以,那我们先来理一下思路。
政采云前端团队
2020/04/27
26K0
《你不知道的 Blob》番外篇
原文对 Blob 的知识点介绍得非常完整清晰,本文通过四个问题来总结本文核心知识:
pingan8787
2020/06/08
2.6K0
java解析url的链接和参数_java根据url下载图片
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/193286.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
2.1K0
# 浏览器截图方案分析
html2canvasopen in new window 用的比较广泛的前端截图方案,先将 DOM 一个个 转为 Canvas 然后导出图片(使用 canvas 自带的 toDataUrl、toBobl)即可。使用起来应该是兼容性比较好的方案了,能解决大部分的需求,但是也有一写小问题,如:
九旬
2023/10/19
4050
如何用代码控制浏览器下载知乎大v的粉丝数据?
欢迎用户在后台留言需解答的问题, mixlab 将会不定期的从中选择提供解决方案。同时 mixlab 微信群已经汇集了机器学习、自然语言处理、前端、后端、产品经理、UI设计师、建筑设计师、高校教师、CEO~相关问题,也会有热心群友解答。
mixlab
2018/07/25
5880
爬虫实战笔记:没有什么网站是不能爬的!
通过Chrome的开发者工具Network,筛选ws,找到websocket的连接,进行第一步 分析。
房东的狗丶
2023/02/17
7480
Canvas 进阶(六)实现图片压缩功能
因此我们设计一个 imageCompress 类,传入一个 option, 其参数有:
小皮咖
2020/02/25
1.4K0
Canvas 进阶(六)实现图片压缩功能
html5前端图片压缩
如今手机像素越来越高,造成拍出来的照片越来越大,随便拍一张就好几兆,于是乎就有了一种需求就是压缩图片,在之前压缩图片的功能是在后台操作的,之后前端亦可以进行图片的压缩功能。
OECOM
2020/07/02
3.7K0
所见即所得——HTML转图片组件开发
在我们日常开发中一定会遇到"所见即所得"的需求,如导出查询表格中的内容为 Excel 表格——《前端导出 Excel,让后端刮目相看》(https://juejin.cn/post/7030291455243452429)、通过后台网页配置实现配置预览页与实际页面展示的统一——《从零开发一款可视化大屏制作平台》(https://juejin.cn/post/6937257727106220040)。
政采云前端团队
2022/12/01
3.3K0
所见即所得——HTML转图片组件开发
前段图片跨域问题,导致canvastoDataURL错误
因为图片资源放到OSS上,一般情况下img的src是不存在这个问题的,但是因为需要图片合成,需要拿到图片资源后进行处理,比如前段canvas图片合成,避免不了会出现跨域情况。
93年的老男孩
2019/12/20
3K0
相关推荐
使用h5 <a>标签 href='url' download 下载踩过的坑
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文