最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

axios請求設(shè)置responseType為'blob'或'arraybuffer'下載時如何正確處理返回值

 更新時間:2023年01月12日 09:31:07   作者:代碼修整工  
這篇文章主要給大家介紹了關(guān)于axios請求設(shè)置responseType為'blob'或'arraybuffer'下載時如何正確處理返回值的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下

問題:

調(diào)用后臺圖片接口,后臺返回二進制流圖片數(shù)據(jù)格式。前端接收到流后處理數(shù)據(jù)顯示在img標(biāo)簽。

解決:

1、設(shè)置axios接收參數(shù)格式為"arraybuffer":

responseType: 'arraybuffer'

2、轉(zhuǎn)換為base64格式圖片數(shù)據(jù)在img標(biāo)簽顯示:

return 'data:image/png;base64,' + btoa(
    new Uint8Array(res.data).reduce((data, byte) => data + String.fromCharCode(byte), '')
  );

返回的string直接放在img標(biāo)簽src可直接顯示

設(shè)置axios接收參數(shù)格式為"blob":

axios.post( ExportUrl, Params, {
    responseType: 'blob'
  })
  .then(function(response) {
    this.url = window.URL.createObjectURL(new Blob([response.data]));
    
  });

通過a標(biāo)簽下載文件

const url = '下載的url鏈接';
const link = document.createElement('a');
link.href = url;
link.target = '_blank';
link.setAttribute('download', 'Excel名字.xlsx');
document.body.appendChild(link);
link.click();

responseType值的類型

數(shù)據(jù)類型
‘’DOMString(默認(rèn)類型)
arraybufferArrayBuffer對象
blobBlob對象
documentDocumnet對象
jsonJavaScript object, parsed from a JSON string returned by the server
textDOMString

實例

返回值不同情況的處理方式,舉例如下:

①、請求設(shè)置為 responseType: ‘arraybuffer’,

請求成功時,后端返回文件流,正常導(dǎo)出文件;

請求失敗時,后端返回json對象,如:{“Status”:“false”,“StatusCode”:“500”,“Result”:“操作失敗”},也被轉(zhuǎn)成了arraybuffer

此時請求成功和失敗返回的http狀態(tài)碼都是200

解決方案:將已轉(zhuǎn)為arraybuffer類型的數(shù)據(jù)轉(zhuǎn)回Json對象,然后進行判斷

代碼如下

async downloadFile (file) {
      let res = await this.$axios.post(this.API.order.tradeImpExcle, { responseType: "arraybuffer" });
      if (!res) return;
      try {
        //如果JSON.parse(enc.decode(new Uint8Array(res.data)))不報錯,說明后臺返回的是json對象,則彈框提示
        //如果JSON.parse(enc.decode(new Uint8Array(res.data)))報錯,說明返回的是文件流,進入catch,下載文件
        let enc = new TextDecoder('utf-8')
        res = JSON.parse(enc.decode(new Uint8Array(res.data))) //轉(zhuǎn)化成json對象
        if (res.Status == "true") {
          this.refresh()
          this.$message.success(res.Msg)
        } else {
          this.$message.error(res.Result)
        }
      } catch (err) {
        const content = res.data;
        const blob = new Blob([content]);
        let url = window.URL.createObjectURL(blob);
        let link = document.createElement("a");
        link.style.display = "none";
        link.href = url;
        link.setAttribute(
          "download",
          res.headers["content-disposition"].split("=")[1]
        );
        document.body.appendChild(link);
        link.click();
      }
    }

②、請求設(shè)置為 responseType: ‘blob’,

解決方案:將已轉(zhuǎn)為blob類型的數(shù)據(jù)轉(zhuǎn)回Json對象,然后進行判斷

代碼如下

 async downloadFile (file) {
      let formData = new FormData();
      formData.append("allTradesExcelFile", file);
      let res = await this.$axios.post(this.API.order.tradeImpExcle, formData, { responseType: "blob" });
      if (!res) return;
      let r = new FileReader()
      let _this = this
      r.onload = function () {
        try {
          // 如果JSON.parse(this.result)不報錯,說明this.result是json對象,則彈框提示
          // 如果JSON.parse(this.result)報錯,說明返回的是文件流,進入catch,下載文件
          res = JSON.parse(this.result)
          if (res.Status == "true") {
            _this.refresh()
            _this.$message.success(res.Msg)
          } else {
            _this.$message.error(res.Result)
          }
        } catch (err) {
          const content = res.data;
          const blob = new Blob([content]);
          let url = window.URL.createObjectURL(blob);
          let link = document.createElement("a");
          link.style.display = "none";
          link.href = url;
          link.setAttribute(
            "download",
            res.headers["content-disposition"].split("=")[1]
          );
          document.body.appendChild(link);
          link.click();
        }
      }
      r.readAsText(res.data) // FileReader的API
    }

總結(jié)

到此這篇關(guān)于axios請求設(shè)置responseType為'blob'或'arraybuffer'下載時如何正確處理返回值的文章就介紹到這了,更多相關(guān)axios請求設(shè)置responseType下載返回值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JSscript標(biāo)簽有哪些屬性

    JSscript標(biāo)簽有哪些屬性

    本文介紹了JSscript標(biāo)簽有哪些屬性,向HTML頁面中插入JavaScript的主要方法,就是使用script>元素.這個元素由Netscape創(chuàng)造并在NetscapeNavigator2中首先實現(xiàn).后來,這個元素被加入到正式的HTML規(guī)范中,下面小編來講解下JSscript標(biāo)簽有哪些屬性,需要的朋友可以參考下
    2022-01-01
  • js 解析 JSON 數(shù)據(jù)簡單示例

    js 解析 JSON 數(shù)據(jù)簡單示例

    這篇文章主要介紹了js 解析 JSON 數(shù)據(jù)的方法,結(jié)合簡單實例形式分析了js 解析 JSON 格式數(shù)據(jù)的相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2020-04-04
  • WEB高性能開發(fā)之瘋狂的HTML壓縮

    WEB高性能開發(fā)之瘋狂的HTML壓縮

    一篇隨筆中網(wǎng)友 skyaspnet 問我如何壓縮HTML,當(dāng)時回答是推薦他使用gzip,后來想想,要是能把所有的html,jsp(aspx)在運行前都壓縮成1行未免不是一件好事啊。
    2010-06-06
  • 關(guān)于ES6新特性最常用的知識點匯總

    關(guān)于ES6新特性最常用的知識點匯總

    日常開發(fā)中寫的 JavaScript 代碼,會用到ES6的部分新特性,所以下面這篇文章主要給大家介紹了關(guān)于ES6新特性最常用的知識點,文章總結(jié)的非常全面,需要的朋友可以參考下
    2021-11-11
  • 前端js使用xlsx-js-style導(dǎo)出Excel文件并修飾單元格樣式

    前端js使用xlsx-js-style導(dǎo)出Excel文件并修飾單元格樣式

    這篇文章主要給大家介紹了關(guān)于前端js使用xlsx-js-style導(dǎo)出Excel文件并修飾單元格樣式的相關(guān)資料,前端開發(fā)過程中經(jīng)常遇到導(dǎo)出excel的需求,需要的朋友可以參考下
    2023-08-08
  • 詳解javascript表單的Ajax提交插件的使用

    詳解javascript表單的Ajax提交插件的使用

    本文主要介紹了javascript表單的Ajax提交插件的使用,具有一定的參考價值。下面跟著小編一起來看下吧
    2016-12-12
  • javascript 無提示關(guān)閉窗口腳本

    javascript 無提示關(guān)閉窗口腳本

    在IE7、IE8中,使用JavaScript提供的close()方法都可以關(guān)閉當(dāng)前窗口或標(biāo)簽,但都提示討厭的對話框,找了下代碼,終于可以無提示直接關(guān)閉了。
    2009-08-08
  • 微信小程序中正確使用地圖的方法實例

    微信小程序中正確使用地圖的方法實例

    微信小程序誕生之初,功能受限于小程序的理念,微信小程序要體現(xiàn)輕量級的應(yīng)用特點,但在隨后不斷更新中,API接口很好的為小程序賦能,使其可以在不影響本質(zhì)的情況下實現(xiàn)完善功能,這篇文章主要給大家介紹了關(guān)于微信小程序中正確使用地圖的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 淺談javascript中的DOM方法

    淺談javascript中的DOM方法

    DOM就是Html頁面的模型,將每個標(biāo)簽都做為一個對象,JavaScript通過調(diào)用DOM中的屬性、方法就可以對網(wǎng)頁中的文本框、層等元素進行編程控制。比如通過操作文本框的DOM對象,就可以讀取文本框中的值、設(shè)置文本框中的值。
    2015-07-07
  • js中的cookie的讀寫操作示例詳解

    js中的cookie的讀寫操作示例詳解

    cookie是有有效期的,cookie的默認(rèn)有效期是從cookie生成至瀏覽器關(guān)閉,也可以通過設(shè)置cookie的有效期來指定其失效日期;用戶也可以禁止cookie也可以手動刪除cookie
    2014-04-04

最新評論

社会| 宁陕县| 封丘县| 淳化县| 固镇县| 祥云县| 略阳县| 深州市| 阳朔县| 潼南县| 香格里拉县| 安西县| 桑植县| 和龙市| 枣庄市| 诸暨市| 若羌县| 库尔勒市| 故城县| 绥德县| 正蓝旗| 新津县| 大同县| 兴义市| 瑞昌市| 吉木乃县| 宜昌市| 塔城市| 西宁市| 肇东市| 韶关市| 白水县| 耒阳市| 沐川县| 云霄县| 汾阳市| 芮城县| 马公市| 连南| 南充市| 淮南市|