国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > JS > 正文

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

2024-05-06 16:46:07
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

背景

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

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

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

但是這套邏輯在IE下是不行的,這樣寫(xiě)會(huì)直接報(bào)錯(cuò)。

所以IE下需要單獨(dú)處理,這里IE在處理這種文件的時(shí)候給提供了一個(gè)單獨(dú)的方法:window.navigator.msSaveOrOpenBlob(blob, download_filename)調(diào)用這個(gè)方法可以直接觸發(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ù)的長(zhǎng)度,用于后面創(chuàng)建二進(jìn)制數(shù)據(jù)容器var n = bstr.length // 創(chuàng)建一個(gè)Uint8Array類型的數(shù)組以存放二進(jìn)制數(shù)據(jù)var u8arr = new Uint8Array(n) // 將二進(jìn)制數(shù)據(jù)存入U(xiǎn)int8Array類型的數(shù)組中while (n--) { u8arr[n] = bstr.charCodeAt(n) }// 創(chuàng)建blob對(duì)象var blob = new Blob([u8arr])// 調(diào)用瀏覽器的方法,調(diào)起IE的下載流程window.navigator.msSaveOrOpenBlob(blob, 'chart-download' + '.' + 'png')

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

 // 這里是獲取到的圖片base64編碼,這里只是個(gè)例子哈,要自行編碼圖片替換這里才能測(cè)試看到效果 const imgUrl = 'data:image/png;base64,...' // 如果瀏覽器支持msSaveOrOpenBlob方法(也就是使用IE瀏覽器的時(shí)候),那么調(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等新版瀏覽器來(lái)處理  const a = document.createElement('a')  a.href = imgUrl  a.setAttribute('download', 'chart-download')  a.click() }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JavaScript/Ajax教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乡宁县| 米易县| 碌曲县| 开封县| 马尔康县| 景宁| 德州市| 安康市| 寿阳县| 扬中市| 泰兴市| 清涧县| 沁水县| 邢台市| 荃湾区| 广宁县| 呼伦贝尔市| 杂多县| 耒阳市| 中牟县| 皮山县| 兖州市| 平果县| 南开区| 天峻县| 蓬安县| 高雄县| 岗巴县| 泽普县| 定安县| 辉县市| 灵石县| 苍梧县| 侯马市| 兴仁县| 宁德市| 南昌市| 政和县| 县级市| 富宁县| 新竹县|