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

发布于 2022-09-12 00:43:12 字数 1338 浏览 14 评论 0

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

<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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

瀟灑尐姊 2022-09-19 00:43:12

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

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

相信这篇文章可以让你更加全面的了解

带上头具痛哭 2022-09-19 00:43:12

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文