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

blob轉換成string格式同步調(diào)用問題解決分析

 更新時間:2023年05月23日 09:11:12   作者:甜點cc  
這篇文章主要為大家介紹了blob轉換成string格式同步調(diào)用問題解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

問題背景

通過接口下載文件的時候,后端設置的responseHeader

content-disposition: attachment;filename=文件名.xlsx
content-type: application/vnd.ms-excel;charset=utf-8

前端接口請求的時候,設置responseType: 'blob',后端接口直接返回的是文件流。

然后當下載文件異常的情況下,接口直接返回的“文件下載出錯”的文字,這個時候業(yè)務組件內(nèi)拿到的返回信息已經(jīng)被轉化成blob格式了,所有需要把blob轉成 string,用來提示用戶下載異常。

代碼展示

請求響應攔截處理

獲取文件流、文件名、文件后綴信息

// content-disposition: attachment;filename=文件名.xlsx
const contentDisposition = response.headers['content-disposition']
const _fileName = contentDisposition.split('=')[1]
const fileType = _fileName.substring(_fileName.lastIndexOf('.')); // .xlsx
const fileName = _fileName.substring(0, _fileName.lastIndexOf('.')); // 文件名
if (fileName && fileType) {
  return {
    data: response.data,
    fileName,
    fileType
  }
}

定義工具函數(shù)

因為把blob轉成string需要用 FileReader去讀取,FileReader 是異步的,所以這里需要用Promise返回,方便業(yè)務組件同步調(diào)用

export const downloadFile = (srcData, fileName='下載', fileType='.xls', target='_self') {
  var blob = new Blob([srcData])
  if (window.navigator && window.navigator.msSaveOrOpenBlob) {
    // 兼容IE/Edge
    window.navigator.msSaveOrOpenBlob(blob, fileName + fileType)
  } else {
    var url = window.URL.createObjectURL(blob)
    var a = document.createElement('a')
    a.href = url
    a.target = target
    a.style.display = 'none'
    a.setAttribute('download', fileName + fileType)
    document.body.appendChild(a)
    a.click()
    document.body.removeChild(a)
    window.URL.revokeObjectURL(url) // 釋放資源
  }
}
export const blobToString = (blobData) => {
  return new Promise((resolve) => {
    if (blobData instanceof Blob) {
      const reader = new FileReader();
      reader.readAsText(blobData, 'utf-8')
      reader.onload = function () {
        resolve(reader.result || '')
      }
    } else {
      resolve('')
    }
  })
}

業(yè)務組件調(diào)用

// 省略部分代碼
async down() {
  try {
    const res = await API();
    const { data, fileName, fileType, code} = res || {}
    if (code === -1) {
      const result = await blobToString(data)
      this.$message.error(result)
      return
    }
    downloadFile(data, fileName, fileType)
  } catch (err) {
    console.log(err)
  }
}

以上就是blob轉string同步調(diào)用問題解決分析的詳細內(nèi)容,更多關于blob轉string同步調(diào)用的資料請關注腳本之家其它相關文章!

相關文章

  • 純JS實現(xiàn)監(jiān)控本地文件變化

    純JS實現(xiàn)監(jiān)控本地文件變化

    你是否曾夢想擁有一個能夠?qū)崟r監(jiān)控本地文件變化的網(wǎng)頁應用,現(xiàn)在,這個夢想即將成為現(xiàn)實,本文將通過純JS實現(xiàn)這一功能,感興趣的小伙伴可以了解下
    2025-04-04
  • js正則表達式中exec用法實例

    js正則表達式中exec用法實例

    這篇文章主要介紹了js正則表達式中exec用法,實例分析了javascript中使用exec執(zhí)行正則表達式的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 對象題目的一個坑 理解Javascript對象

    對象題目的一個坑 理解Javascript對象

    這篇文章主要介紹了Javascript對象,特別為大家分享了對象題目的一個坑,提供了解題思路,感興趣的小伙伴們可以參考一下
    2015-12-12
  • 在js代碼拼接dom對象到頁面上的模板總結

    在js代碼拼接dom對象到頁面上的模板總結

    今天小編就為大家分享一篇關于在js代碼拼接dom對象到頁面上的模板總結,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 如何動態(tài)的導入js文件具體該怎么實現(xiàn)

    如何動態(tài)的導入js文件具體該怎么實現(xiàn)

    如何需要進行動態(tài)的導入js文件,那么下面的方法或許可以幫助到大家
    2014-01-01
  • js打造數(shù)組轉json函數(shù)

    js打造數(shù)組轉json函數(shù)

    這里給大家分享的是一段使用js實現(xiàn)數(shù)組轉換成json的函數(shù)代碼,代碼簡潔易懂,并附上了使用方法,小伙伴們拿去試試。
    2015-01-01
  • js批量設置樣式的三種方法不推薦使用with

    js批量設置樣式的三種方法不推薦使用with

    批量設置樣式的三種方法:第一種使用JSON/第二種使用cssText/使用第三種with(不推薦使用),感興趣的朋友可以參考下,希望可以幫助到你
    2013-02-02
  • javascript實現(xiàn)手機震動API代碼

    javascript實現(xiàn)手機震動API代碼

    一個新的API出來了。HTML5 (很快)將支持用戶設備振動。這明顯是很有趣的事情,比如它可以用戶觸發(fā)提醒,提升游戲體驗,下面小編給大家整理javascript手機震動api,需要的朋友可以參考下
    2015-08-08
  • js實現(xiàn)表單多按鈕提交action的處理方法

    js實現(xiàn)表單多按鈕提交action的處理方法

    這篇文章主要介紹了js實現(xiàn)表單多按鈕提交action的處理方法,需要的朋友可以參考下
    2015-10-10
  • javascript隨機變色實例代碼

    javascript隨機變色實例代碼

    在本篇文章里小編給大家分享的是關于javascript隨機變色的相關實例內(nèi)容,需要的朋友們可以測試下。
    2019-10-10

最新評論