h5中点击按钮下载图片
在开发uni-app项目中有一个需求是点击按钮,下载多张图片,图片路径是后台返回的。(uni-app中saveImageToPhotosAlbum不可用)-----------------------以下代码是我参考别人的方法以及自己亲身实践得来的
方法一:
var oA = document.createElement("a");
oA.download = index||'photo'; // 设置下载的文件名,默认是'下载'
oA.href = url---------------------------此处为你的图片地址
document.body.appendChild(oA);
oA.click();
oA.remove();
该方法,在pc以及手机浏览器都可以下载,在手机浏览器(qq浏览器)中可以将图片保存在相册 测试手机(苹果13)
但是当保存多张图片时,只能保存中间的一张,pc和浏览器均是
方法二:
let image = new Image(); // 解决跨域 Canvas 污染问题 image.setAttribute("crossOrigin", "anonymous"); image.onload = function() { let canvas = document.createElement("canvas"); canvas.width = image.width; canvas.height = image.height; let context = canvas.getContext("2d"); context.drawImage(image, 0, 0, image.width, image.height); let img = canvas.toDataURL("image/png"); //得到图片的base64编码数据 let a = document.createElement("a"); // 生成一个a元素 let event = new MouseEvent("click"); // 创建一个单击事件 a.download = name|| "photo"; // 设置图片名称,-------------你传递的图片名称 a.href = img; // 将生成的URL设置为a.href属性 a.dispatchEvent(event); // 触发a的单击事件 }; image.src = url;----------------你的图片地址
该方法,在pc以及手机浏览器都可以下载,在手机浏览器(qq浏览器)中可以将图片保存在相册 测试手机(苹果13)-------偶尔会报跨域问题
单张图片没问题,多张图片有时会报跨域
方法三
var iframe = document.createElement('iframe'); iframe.src =url iframe.style = "display:none"; document.body.appendChild(iframe);
该方法,在pc可以下载,在手机浏览器(qq浏览器)中点击无反应,在苹果自带的safari浏览器中可以下载到浏览器中, 测试手机(苹果13)
单张多张均可下载