下载一个图片或者文件,我们可以用 a 标签下载 资源在同一服务器的图片或文件。
1.window.open(url) 只能下载文件,图片只能预览,并且屏幕会闪一下。
2.iframe 屏幕不会闪一下,但是适合下载文件,不适合下载图片。
const iframe = document.createElement('iframe');
iframe.src = file.FJDZ;
iframe.style.display = 'none';
document.body.appendChild(iframe);
setTimeout(() => {
document.body.removeChild(iframe);
}, 1000);
3.a标签下载
let saveLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
saveLink.href = item.FJDZ;
saveLink.download = item.FJMC;
saveLink.target = '_blank';
saveLink.click();
4.能下载文件、图片,并且也不会闪一下,个人认为是最合适的方法。
let link = document.createElement('a')
let url = file.FJDZ;
fetch(url).then(res => res.blob()).then(blob => {
link.href = URL.createObjectURL(blob)
link.download = file.FJMC;
document.body.appendChild(link)
link.click()
});
5.解决图片不同源下载问题
downloadIamge(imgsrc, name) {//下载图片地址和图片名
var image = new Image();
// 解决跨域 Canvas 污染问题
image.setAttribute("crossOrigin", "anonymous");
image.onload = function() {
var canvas = document.createElement("canvas");
canvas.width = image.width;
canvas.height = image.height;
var context = canvas.getContext("2d");
context.drawImage(image, 0, 0, image.width, image.height);
var url = canvas.toDataURL("image/png"); //得到图片的base64编码数据
var a = document.createElement("a"); // 生成一个a元素
var event = new MouseEvent("click"); // 创建一个单击事件
a.download = name || "photo"; // 设置图片名称
a.href = url; // 将生成的URL设置为a.href属性
a.dispatchEvent(event); // 触发a的单击事件
};
image.src = imgsrc;
},
版权声明:本文为Momentzxl原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。