成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

純javascript前端如何實(shí)現(xiàn)base64圖片下載

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

渭源網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),渭源網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為渭源1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的渭源做網(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()
 }

以上是“純javascript前端如何實(shí)現(xiàn)base64圖片下載”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享文章:純javascript前端如何實(shí)現(xiàn)base64圖片下載
當(dāng)前路徑:http://jinyejixie.com/article32/gggipc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、做網(wǎng)站、網(wǎng)站收錄、動(dòng)態(tài)網(wǎng)站、、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
容城县| 贵定县| 威海市| 玛沁县| 台北县| 建始县| 华宁县| 靖远县| 罗源县| 辽阳市| 七台河市| 广丰县| 铜鼓县| 丹阳市| 黄大仙区| 两当县| 乐清市| 府谷县| 富锦市| 边坝县| 肥西县| 武平县| 平果县| 唐海县| 翁牛特旗| 苍溪县| 石家庄市| 通城县| 合阳县| 庆城县| 前郭尔| 秦安县| 铜川市| 泊头市| 长治市| 喀喇沁旗| 华坪县| 上林县| 原阳县| 苍梧县| 贵港市|