加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

解决H5的a标签的download属性下载service上的文件出现跨域问题

发布时间:2020-03-28 23:32:57 所属栏目:编程 来源:站长网
导读:1.通过点击下载多媒体文件(图片/视频/文件等) 最简朴的方法: a href='http://www.jb51.net/html5/url' download=filename.ext下载文件/a 假如url指向同源资源,是正常的。 假如url指向第三方资源,download会失效,示意和不行使download时同等赏识器能打

1.通过点击下载多媒体文件(图片/视频/文件等)

最简朴的方法:

<a href='http://www.jb51.net/html5/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; }; ```

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读