解决H5的a标签的download属性下载service上的⽂件出
现跨域问题
1.通过点击下载多媒体⽂件(图⽚/视频/⽂件等)
最简单的⽅式:
<a href='url' download="">下载⽂件</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 = ateObjectURL(blob)
let a = ateElement('a')
//地址
a.href = objectUrl
/
/修改⽂件名
a.download = name
// 触发点击
document.body.appendChild(a)
a.click()
//移除
setTimeout(() => veChild(a), 1000)
}
2.图⽚格式
如果我们想下载⼀张图⽚,可以把这张图⽚转换成base64格式,然后下载。
```
export const downloadImg = async (url, name) => {
var canvas = ateElement('canvas'),
ctx = Context('2d'),
img = new Image();
canvas.height = img.height;
canvas.width = img.width;
ctx.drawImage(img, 0, 0);
var dataURL = DataURL('image/png');
let a = ateElement('a');
a.href = dataURL;
a.download = name;
document.body.appendChild(a);
a.click();
setTimeout(() => {
veChild(a);
canvas = null;
}, 1000);
};h5平台源码下载
img.src = url;
};
```
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。