中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

純javascript前端如何實現base64圖片下載

發布時間:2021-08-07 09:28:34 來源:億速云 閱讀:824 作者:小新 欄目:web開發

小編給大家分享一下純javascript前端如何實現base64圖片下載,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

背景

在項目開發過程中,經常會有圖片導出的需求,尤其是帶有圖表類的應用,通常需要將圖表下載導出。

在chrome等新版瀏覽器中實現base64圖片的下載還是比較容易的:

  1. 創建一個a標簽

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

  3. 指定a標簽的download屬性,作為下載文件的名稱

  4. 觸發a標簽的點擊事件

但是這套邏輯在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()
 }

以上是“純javascript前端如何實現base64圖片下載”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德阳市| 漯河市| 娄底市| 陕西省| 西林县| 南宫市| 定远县| 双桥区| 乡城县| 科尔| 嘉义县| 邵东县| 镇安县| 精河县| 乐昌市| 乐陵市| 利川市| 南溪县| 武陟县| 南京市| 杭锦后旗| 灵丘县| 盈江县| 云南省| 沂南县| 吉安市| 辽阳县| 北碚区| 板桥市| 民县| 沙湾县| 福安市| 甘孜县| 奎屯市| 永泰县| 海晏县| 密山市| 岱山县| 新宁县| 汉川市| 永和县|