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

vue如何將base64流數(shù)據(jù)轉(zhuǎn)成pdf文件并在新頁面打開

 更新時間:2023年02月08日 16:16:24   作者:小薯片子  
這篇文章主要介紹了vue如何將base64流數(shù)據(jù)轉(zhuǎn)成pdf文件并在新頁面打開問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

將base64流數(shù)據(jù)轉(zhuǎn)成pdf文件并在新頁面打開

參考了很多寫法,最終這種方法可以實現(xiàn)。

具體實現(xiàn)方法:

將下面這兩個方法寫在vue中,直接調(diào)用viewPdf函數(shù),傳參為要轉(zhuǎn)換的base64流數(shù)據(jù)

    viewPdf(content) {
      if (!content) {
        this.$message.error('暫無意見')
        return
      }
      const blob = this.base64ToBlob(content)
      if (window.navigator && window.navigator.msSaveOrOpenBlob) {
        window.navigator.msSaveOrOpenBlob(blob)
      } else {
        const fileURL = URL.createObjectURL(blob)
        window.open(fileURL)
      }
    },
    base64ToBlob(code) {
      code = code.replace(/[\n\r]/g, '')
      // atob() 方法用于解碼使用 base-64 編碼的字符串。
      const raw = window.atob(code)
      const rawLength = raw.length
      const uInt8Array = new Uint8Array(rawLength)
      for (let i = 0; i < rawLength; ++i) {
        uInt8Array[i] = raw.charCodeAt(i)
      }
      return new Blob([uInt8Array], { type: 'application/pdf' })
    },

base64轉(zhuǎn)二進制文件流并顯示

1.判斷base類型 這里提供圖片和pdf

  function base64FileHeaderMapper(fileBase64) {
    let fileHeader = new Map();
    //獲取不同文件的文件頭前3個字作為判斷依據(jù)
    fileHeader.set("/9j", "jpeg");
    fileHeader.set("iVB", "png");
    // fileHeader.set("Qk0", "BMP")
    // fileHeader.set("SUk", "TIFF")
    fileHeader.set("JVB", "pdf");
    // fileHeader.set("UEs", "OFD")
    let res = "";
    //遍歷map中所提及的文件頭特征
    fileHeader.forEach((v, k) => {//IE不支持箭頭函數(shù)  兼容IE需要改寫
      if (k == fileBase64.substr(0, 3)) {
        res = v;
      }
    });
    //如果不在map中返回unknown file
    if (res == "") {
      res = "unknown file";
    }
    //否則返回map中的value值
    return res;
  }

2.base轉(zhuǎn)二進制文件流

  function base64ToBlob(code, type) {
    code = code.replace(/[\n\r]/g, "");
    let raw = window.atob(code);
    let rawLength = raw.length;
    let uint8Array = new Uint8Array(rawLength);
    for (let i = 0; i < rawLength; i++) {
      uint8Array[i] = raw.charCodeAt(i);
    }
    if ("pdf" === type) {
      return new Blob([uint8Array], { type: "application/pdf" });
    } else {
      return new Blob([uint8Array], { type: "image/jpeg" });
    }
  }

3.填坑

base64 字符串中不含 data:application/pdf;base64,

否則 window.atob(code);解碼報錯,不解碼也無法加載pdf

在這里插入圖片描述

4.完整代碼

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>base轉(zhuǎn)二進制</title>
</head>

<body>
  <div style="width: 100vw;height: 100vh">
    <iframe width="100%" height="100%" src="" frameborder="0" id="iframe"></iframe>
  </div>
  <script>
    let iframe = document.getElementById("iframe")
    let base = "JVBERi0xLjQKJdPr6eEKMSAwIG9iago8PC9DcmVhdG9yIChNb3ppbGxhLzUuMC..."; //base64不完整
    let s = base64FileHeaderMapper(base);
    let blob = base64ToBlob(base, s);
    iframe.src = URL.createObjectURL(blob);

    function base64FileHeaderMapper(fileBase64) {
      let fileHeader = new Map();
      //獲取不同文件的文件頭前3個字作為判斷依據(jù)
      fileHeader.set("/9j", "jpeg");
      fileHeader.set("iVB", "png");
      // fileHeader.set("Qk0", "BMP")
      // fileHeader.set("SUk", "TIFF")
      fileHeader.set("JVB", "pdf");
      // fileHeader.set("UEs", "OFD")
      let res = "";
      //遍歷map中所提及的文件頭特征
      fileHeader.forEach((v, k) => {//箭頭函數(shù)IE不支持 兼容IE需改寫
        if (k == fileBase64.substr(0, 3)) {
          res = v;
        }
      });
      //如果不在map中返回unknown file
      if (res == "") {
        res = "unknown file";
      }
      //否則返回map中的value值
      return res;
    }

    function base64ToBlob(code, type) {
      code = code.replace(/[\n\r]/g, "");
      let raw = window.atob(code);
      let rawLength = raw.length;
      let uint8Array = new Uint8Array(rawLength);
      for (let i = 0; i < rawLength; i++) {
        uint8Array[i] = raw.charCodeAt(i);
      }
      if ("pdf" === type) {
        return new Blob([uint8Array], {
          type: "application/pdf"
        });
      } else {
        return new Blob([uint8Array], {
          type: "image/jpeg"
        });
      }
    }
  </script>
</body>

</html>

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue.js父子組件傳參的原理與實現(xiàn)方法

    vue.js父子組件傳參的原理與實現(xiàn)方法

    這篇文章主要介紹了vue.js父子組件傳參的原理與實現(xiàn)方法,結(jié)合實例形式分析了vue.js父子組件傳參的基本原理、實現(xiàn)方法與相關(guān)操作注意事項,需要的朋友可以參考下
    2023-04-04
  • Vue Treeselect樹形下拉框的使用小結(jié)

    Vue Treeselect樹形下拉框的使用小結(jié)

    樹形下拉框是一個帶有下列樹形結(jié)構(gòu)的下拉框,本文主要介紹了Vue Treeselect樹形下拉框的使用小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • vue組件引用另一個組件出現(xiàn)組件不顯示的問題及解決

    vue組件引用另一個組件出現(xiàn)組件不顯示的問題及解決

    這篇文章主要介紹了vue組件引用另一個組件出現(xiàn)組件不顯示的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue實現(xiàn)動態(tài)查詢規(guī)則生成組件

    Vue實現(xiàn)動態(tài)查詢規(guī)則生成組件

    今天我們來給大家介紹下在Vue開發(fā)中我們經(jīng)常會碰到的一種需求場景,本文主要介紹了Vue動態(tài)查詢規(guī)則生成組件,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 基于vue 實現(xiàn)token驗證的實例代碼

    基于vue 實現(xiàn)token驗證的實例代碼

    這篇文章主要介紹了基于vue 實現(xiàn)token驗證的實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-12-12
  • Vue組件開發(fā)之異步組件詳解

    Vue組件開發(fā)之異步組件詳解

    這篇文章主要為大家詳細介紹了Vue組件開發(fā)之異步組件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Vue修改Dom不生效的解決

    Vue修改Dom不生效的解決

    這篇文章主要介紹了Vue修改Dom不生效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 如何使用Vue3實現(xiàn)文章內(nèi)容中多個"關(guān)鍵詞"標(biāo)記高亮顯示

    如何使用Vue3實現(xiàn)文章內(nèi)容中多個"關(guān)鍵詞"標(biāo)記高亮顯示

    高亮顯示是我們?nèi)粘i_發(fā)中經(jīng)常會遇到的需求,下面這篇文章主要給大家介紹了關(guān)于如何使用Vue3實現(xiàn)文章內(nèi)容中多個"關(guān)鍵詞"標(biāo)記高亮顯示的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • vue實現(xiàn)excel文件的導(dǎo)入和讀取完整步驟

    vue實現(xiàn)excel文件的導(dǎo)入和讀取完整步驟

    Vue的數(shù)據(jù)綁定功能非常強大,很適合用來讀取Excel內(nèi)容,這篇文章主要給大家介紹了關(guān)于vue實現(xiàn)excel文件的導(dǎo)入和讀取的相關(guān)資料,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • vue中使用AJAX實現(xiàn)讀取來自XML文件的信息

    vue中使用AJAX實現(xiàn)讀取來自XML文件的信息

    這篇文章主要為大家詳細介紹了vue中如何使用AJAX實現(xiàn)讀取來自XML文件的信息,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的小伙伴可以參考下
    2023-12-12

最新評論

新营市| 武义县| 巢湖市| 林口县| 安仁县| 丹凤县| 武乡县| 屯留县| 阿拉善左旗| 林西县| 修水县| 津市市| 建昌县| 丹凤县| 楚雄市| 临泽县| 陆川县| 万盛区| 伊春市| 宝鸡市| 遂平县| 阳东县| 麻阳| 苗栗市| 钟祥市| 虞城县| 明光市| 义马市| 望江县| 宁乡县| 莎车县| 庄河市| 萍乡市| 铜梁县| 澄江县| 沂水县| 洪洞县| 界首市| 绩溪县| 将乐县| 平邑县|