vue移动端不同源下载图片问题

电脑谷歌调试没问题可以成功下载,但手机无法获取到文件 所以下载失败

<div class="btn f1" @click="downs">下载二维码</div>


downs() {
      this.downloadIamge(this.siteConfig.wximage, '二维码');
    },


downloadIamge(imgsrc, name) {
      // 下载图片地址和图片名
      const image = new Image();
      // 解决跨域 Canvas 污染问题
      image.setAttribute('crossOrigin', 'anonymous');
      // eslint-disable-next-line func-names
      image.onload = function () {
        const canvas = document.createElement('canvas');
        canvas.width = image.width;
        canvas.height = image.height;
        const context = canvas.getContext('2d');
        context.drawImage(image, 0, 0, image.width, image.height);
        const url = canvas.toDataURL('image/png'); // 得到图片的base64编码数据
        const a = document.createElement('a'); // 生成一个a元素
        a.download = name || 'photo'; // 设置图片名称
        a.href = url; // 将生成的URL设置为a.href属性
        a.click();
      };
      image.src = imgsrc;
      this.$popup.open({
        content: '下载成功',
      });
    },
    
——————电脑调试下载成功——————

谷歌下载成功 2020-01-15 17.17.50.png

——————手机下载获取失败——————

WechatIMG8.jpeg

阅读 4.9k
3 个回答

应该还是canvas.toDataURL的跨域造成的,很多webwiew的沙箱有安全设置;虽然你已经设置了
crossOrigin属性,两步建议:

  • 第一步:直接设置image.crossOrigin = 'anonymous';
  • 第二步:如果你的图片源不是你同域名下的,是文件服务器下的,看服务器能不能设置一个跨域的头部:Access-Control-Allow-Origin: '*'

浏览器问题,换个火狐就能下载;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题