zoukankan      html  css  js  c++  java
  • JAVASCRIPT-图片下载保存到本地

    需求:点击图片下载到本地。

    方法一:直接最简单的html实现:

    <a href="/images/myw3schoolimage.jpg" download="w3logo">

    这种方法最简单,但是换成如下地址,图片地址与当前地址不同源的时候,此时点击会在新窗口打开这个图片地址,而不是下载。

    <a href="https://cn.gravatar.com/avatar/b8ea6205c38fad951b5b02ae22f037c8&d=mm">
      <img src="https://cn.gravatar.com/avatar/b8ea6205c38fad951b5b02ae22f037c8&d=mm" alt="testload" />
    </a>

    为了解决上述方法的缺陷,这边百度找到了第二种方法:

       /**
        * @param {*} imgData 图片对象
        * @param {*} str     图片下载到本地的文件名
        * @param {*} type    图片下载到本地的类型
        */
       commonDownloads(imgData, str, type) {
        const blob = new Blob([imgData], { type: type });
        if (window.navigator && window.navigator.msSaveOrOpenBlob) { // 兼容ie
            window.navigator.msSaveOrOpenBlob(blob, str);
        } else {
            const downloadElement = document.createElement('a');
            const href = window.URL.createObjectURL(blob); // 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象
            downloadElement.href = href;
            downloadElement.download = str;
            document.body.appendChild(downloadElement);
            downloadElement.click();
            document.body.removeChild(downloadElement);
            window.URL.revokeObjectURL(href); // 释放之前已经存在的、通过调用 URL.createObjectURL() 创建的 URL 对象。当你结束使用某个 URL 对象之后,应该通过调用这个方法来让浏览器知道不用在内存中继续保留对这个文件的引用了。
        }
       }

    调用:

            <div>
              <img src="https://cn.gravatar.com/avatar/b8ea6205c38fad951b5b02ae22f037c8&d=mm" alt="testload" onClick={this.imageClick} />
            </div>
      imageClick = () => {
        // 下载图片
        const imgUrl = 'https://cn.gravatar.com/avatar/b8ea6205c38fad951b5b02ae22f037c8&d=mm';
          const str = `${new Date().getTime()}.png`;
          const type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
        Util.commonDownloads(imgUrl, str, type);
      }

    方法二用的是blob,还有许多其他的方法iframe和canvans等。

  • 相关阅读:
    Delphi XE5 android 蓝牙通讯传输
    Delphi XE5 android toast
    Delphi XE5 android openurl(转)
    Delphi XE5 如何设计并使用FireMonkeyStyle(转)
    Delphi XE5 android 捕获几个事件
    Delphi XE5 android listview
    Delphi XE5 android 黑屏的临时解决办法
    Delphi XE5 android popumenu
    Delphi XE5 android 获取网络状态
    Delphi XE5 android 获取电池电量
  • 原文地址:https://www.cnblogs.com/yxfboke/p/12876477.html
Copyright © 2011-2022 走看看