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等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章