zoukankan      html  css  js  c++  java
  • a 标签的download 属性在谷歌浏览器下无法下载图片,如何处理?

    a 标签的download属性在下载图片文件的时候是如何的方便,可是可是谷歌浏览器不支持下载,而是下载打开新窗口预览图片。这个兼容性问题如何解决呢?

    了解了一番,HTMLCanvasElement.toBlob()方法可以用以展示canvas上的图片;这个图片文件可以被缓存或保存到本地,由用户代理端自行决定。

    更多HTMLCanvasElement.toBlob()详情前去https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLCanvasElement/toBlob了解。

    直接上代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>图片下载</title>
    </head>
    <body>
      <a href="https://www.baidu.com/img/bd_logo1.png" download="bd_logo1.png">
        a download 属性下载
      </a>
      <br /><br />
      <button onclick="add('https://pic2.zhimg.com/v2-5ec052fff9d691c6a61654ed16440547_400x224.jpg')">
        非跨域图片
      </button>
      <br /><br />
      <button onclick="add('https://www.baidu.com/img/bd_logo1.png')">
        跨域图片
      </button>
      <br /><br />
      <script>
        function add(src) {
          var filename; //图片名称
          var filetype; //图片类型
          var path = src;
          if (path.indexOf("/") > 0) {
            var file = path.substring(path.lastIndexOf("/") + 1, path.length);
            var fileArr = file.toLowerCase().split(".");
            filename = fileArr[0];
            filetype = fileArr[1];
          }
          var canvas = document.createElement("canvas");
          var img = document.createElement("img");
          img.onload = function (e) {
            canvas.width = img.width;
            canvas.height = img.height;
            var context = canvas.getContext("2d");
            context.drawImage(img, 0, 0, img.width, img.height);
            canvas.toBlob(blob => {
              var a = document.createElement("a");
              //a.href : blob:http://127.0.0.1:5500/fdd7df7a-c953-4a0f-a4ec-8bb9d09056d8
              a.href = window.URL.createObjectURL(blob);
              a.download = filename;
              a.click();
            }, `image/${filetype}`);
          };
          img.setAttribute("crossOrigin", "Anonymous");
          img.src = src;
        }
      </script>
    </body>
    </html>

    根据以上步骤操作后依然报跨域,后端处理。。。

    如果感觉可以点个赞哦

  • 相关阅读:
    关于data初始化值
    switch的优化替代写法
    phpstorm安装xdebug
    如何将一个列表封装为一个树形结构
    Win10系统桌面图标距离间距变大的问题
    cnpm无法加载文件的问题
    0、springboot
    1、springboot2新建web项目
    Game游戏分析
    netty学习
  • 原文地址:https://www.cnblogs.com/changxue/p/11049025.html
Copyright © 2011-2022 走看看