欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

純javascript前端實(shí)現(xiàn)base64圖片下載(兼容IE10+)

 更新時間:2018年09月14日 13:56:18   作者:水電  
這篇文章主要介紹了純javascript前端實(shí)現(xiàn)base64圖片下載(兼容IE10+),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

背景

在項(xiàng)目開發(fā)過程中,經(jīng)常會有圖片導(dǎo)出的需求,尤其是帶有圖表類的應(yīng)用,通常需要將圖表下載導(dǎo)出。

在chrome等新版瀏覽器中實(shí)現(xiàn)base64圖片的下載還是比較容易的:

  1. 創(chuàng)建一個a標(biāo)簽
  2. 將a標(biāo)簽的href屬性賦值為圖片的base64編碼
  3. 指定a標(biāo)簽的download屬性,作為下載文件的名稱
  4. 觸發(fā)a標(biāo)簽的點(diǎn)擊事件

但是這套邏輯在IE下是不行的,這樣寫會直接報錯。

所以IE下需要單獨(dú)處理,這里IE在處理這種文件的時候給提供了一個單獨(dú)的方法:window.navigator.msSaveOrOpenBlob(blob, download_filename)調(diào)用這個方法可以直接觸發(fā)IE的下載,還是比較方便的。具體做法如下:

// 截取base64的數(shù)據(jù)內(nèi)容(去掉前面的描述信息,類似這樣的一段:data:image/png;base64,)并解碼為2進(jìn)制數(shù)據(jù)
var bstr = atob(imgUrl.split(',')[1]) 
// 獲取解碼后的二進(jìn)制數(shù)據(jù)的長度,用于后面創(chuàng)建二進(jìn)制數(shù)據(jù)容器
var n = bstr.length 
// 創(chuàng)建一個Uint8Array類型的數(shù)組以存放二進(jìn)制數(shù)據(jù)
var u8arr = new Uint8Array(n) 
// 將二進(jìn)制數(shù)據(jù)存入Uint8Array類型的數(shù)組中
while (n--) {
 u8arr[n] = bstr.charCodeAt(n) 
}
// 創(chuàng)建blob對象
var blob = new Blob([u8arr])
// 調(diào)用瀏覽器的方法,調(diào)起IE的下載流程
window.navigator.msSaveOrOpenBlob(blob, 'chart-download' + '.' + 'png')

整體實(shí)現(xiàn)代碼

 // 這里是獲取到的圖片base64編碼,這里只是個例子哈,要自行編碼圖片替換這里才能測試看到效果
 const imgUrl = 'data:image/png;base64,...'
 // 如果瀏覽器支持msSaveOrOpenBlob方法(也就是使用IE瀏覽器的時候),那么調(diào)用該方法去下載圖片
 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()
 }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論