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)

    单张多张均可下载

 

posted @ 2022-04-08 16:23  冰晨之露  阅读(599)  评论(0编辑  收藏  举报