首頁  >  文章  >  web前端  >  如何用前端實現base64圖片下載(程式碼)

如何用前端實現base64圖片下載(程式碼)

不言
不言原創
2018-09-14 15:59:265236瀏覽

這篇文章帶給大家的內容是關於如何用前端實現base64圖片下載(程式碼) ,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

背景

在專案開發過程中,經常會有圖片匯出的需求,尤其是帶有圖表類別的應用,通常需要將圖表下載匯出。
在chrome等新版瀏覽器中實作base64圖片的下載還是比較容易的:

  1. #建立一個a標籤

  2. ##將a標籤的href屬性賦值為圖片的base64編碼

  3. 指定a標籤的download屬性,作為下載檔的名稱

  4. ##觸發a標籤的點選事件
  5. 但是這套邏輯在IE下是不行的,這樣寫會直接報錯。
所以IE下需要單獨處理,這裡IE在處理這種檔案的時候給提供了一個單獨的方法:window.navigator.msSaveOrOpenBlob(blob, download_filename)呼叫這個方法可以直接觸發IE的下載,還是比較方便的。具體做法如下:

// 截取base64的数据内容(去掉前面的描述信息,类似这样的一段:data:image/png;base64,)并解码为2进制数据
var bstr = atob(imgUrl.split(',')[1]) 
// 获取解码后的二进制数据的长度,用于后面创建二进制数据容器
var n = bstr.length 
// 创建一个Uint8Array类型的数组以存放二进制数据
var u8arr = new Uint8Array(n) 
// 将二进制数据存入Uint8Array类型的数组中
while (n--) {
  u8arr[n] = bstr.charCodeAt(n) 
}
// 创建blob对象
var blob = new Blob([u8arr])
// 调用浏览器的方法,调起IE的下载流程
window.navigator.msSaveOrOpenBlob(blob, 'chart-download' + '.' + 'png')

整體實作程式碼
  // 这里是获取到的图片base64编码,这里只是个例子哈,要自行编码图片替换这里才能测试看到效果
  const imgUrl = 'data:image/png;base64,...'
  // 如果浏览器支持msSaveOrOpenBlob方法(也就是使用IE浏览器的时候),那么调用该方法去下载图片
  if (window.navigator.msSaveOrOpenBlob) {
    var bstr = atob(imgUrl.split(',')[1])
    var n = bstr.length
    var u8arr = new Uint8Array(n)
    while (n--) {
      u8arr[n] = bstr.charCodeAt(n)
    }
    var blob = new Blob([u8arr])
    window.navigator.msSaveOrOpenBlob(blob, 'chart-download' + '.' + 'png')
  } else {
    // 这里就按照chrome等新版浏览器来处理
    const a = document.createElement('a')
    a.href = imgUrl
    a.setAttribute('download', 'chart-download')
    a.click()
  }

相關推薦:

php基於base64解碼圖片與加密圖片還原實例,

#

以上是如何用前端實現base64圖片下載(程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn