国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

后端返回base64文件前端如何下載

這篇具有很好參考價值的文章主要介紹了后端返回base64文件前端如何下載。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.后端返回base64格式文件
后端返回base64文件前端如何下載,前端,vue.js

2.前端代碼

<style lang="less" scoped>
@import "./style/common.less";

.table-div-a {
  color: #409EFF;
  text-decoration: underline;
  cursor: pointer;
}
</style>

<template>
  <div class="template-container content-container" v-loading="pageObj.loading">
    <div class="action-button-div flex-div">
      <div class="action-button-div-left flex-1">
        <el-button class="main-cust-btn" type="primary" size="small" @click="initList()">刷新</el-button>
      </div>
      <div class="action-button-div-right  flex-div">
        <el-select v-model="pageObj.pageParmas.exportType" placeholder="請選擇導(dǎo)出類型" @change="selectVal">
          <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
          </el-option>
        </el-select>
        <!-- <div class="single-query-input margin-right-8">
          <el-input size="small" placeholder="請輸入角色名" v-model="pageObj.queryParams.roleName"></el-input>
        </div>
        <el-button-group>
          <el-button class="main-cust-btn" size="small" type="primary" icon="el-icon-search" @click="initList('query')">查詢</el-button>
        </el-button-group> -->
      </div>
    </div>
    <!--表格區(qū)-->
    <div class="table-div flex-div">
      <el-table :data="pageObj.tableData" :stripe="true" ref="listTableRef" border class="flex-1 list-table"
        header-row-class-name="list-table-header">
        <el-table-column type="index" width="40" align="center">
        </el-table-column>
        <el-table-column prop="startTime" label="下載時間" min-width="150" align="center">
        </el-table-column>
        <el-table-column prop="exportTypeName" label="導(dǎo)出類型" min-width="150" align="center">
        </el-table-column>
        <el-table-column prop="operationalName" label="狀態(tài)" min-width="150" align="center">
        </el-table-column>
        <el-table-column prop="endTime" label="完成時間" min-width="120" align="center">
        </el-table-column>
        <el-table-column label="操作" align="center" width="180" fixed="right">
          <div slot-scope="scope">
            <a class="table-div-a" v-if="'計算完成' == scope.row.operationalName" @click="toExportPath(scope.row)">下載</a>
          </div>
        </el-table-column>
      </el-table>
    </div>
    <!--分頁區(qū)-->
    <div class="pagination-div">
      <el-pagination v-show="pageObj.pageParmas.total > 0" :current-page="pageObj.pageParmas.pageNum + 1"
        :page-sizes="pageObj.Config.paginationParams.pageSizes" :page-size="pageObj.pageParmas.pageSize"
        :layout="pageObj.Config.paginationParams.layout" :total="pageObj.pageParmas.total" @size-change="handleSizeChange"
        @current-change="handlePageChange">
      </el-pagination>
    </div>
    <!--確認刪除對話框-->
    <!-- <del-dialog
      :delDialogVisible="deleteObj.delDialogVisible"
      v-on:doDel="delOne"
      v-on:cancelDel="
        () => {
          deleteObj.delDialogVisible = false;
        }
      "
    ></del-dialog> -->
  </div>
</template>

<script>
// 刪除組件
// import delDialog from "../../components/list/DelDialog.vue";
import config from "./config.js";
export default {
  components: {
    // delDialog
  },
  data() {
    return {
      pageObj: {
        // 頁面屬性
        showSearch: true, // 高級搜索展示
        detailRouter: "roleDetail", // 詳情頁路由
        loading: false, // 加載
        tableData: [],
        queryParams: {},
        pageParmas: {
          pageNum: 0,
          pageSize: 10,
          exportType: ''//2 結(jié)算導(dǎo)出 3 訂單導(dǎo)出
        },
        Config: config
      },
      deleteObj: {
        // 刪除對話框 屬性
        delDialogVisible: false, // 是否顯示刪除對話框
        delOneId: "" // 刪除單個ID
      },
      listLooper: null,
      options: [{
        value: 2,
        label: '結(jié)算導(dǎo)出'
      }, {
        value: 3,
        label: '訂單導(dǎo)出'
      }]
    };
  },
  methods: {
    init() {
      if (Object.keys(this.$route.query).length > 0) {//從訂單和結(jié)算頁面帶值過來
        this.pageObj.pageParmas.exportType = this.$route.query.type;
        console.log(this.pageObj.pageParmas.exportType)
      }
      // 初始化面包屑
      this.$store.commit("setBreadCrumbList", [
        { type: 'title', name: '主數(shù)據(jù)' },
        { type: 'title', name: '下載中心' }
      ]);
      this.initList();
    },
    // 跳轉(zhuǎn)新增頁面
    toAdd() {
      var _ = this;
      this.$store.commit("setEditId", "");
      this.$router.push({
        name: _.pageObj.detailRouter
      });
    },
    // 跳轉(zhuǎn)編輯頁
    toEdit(objId) {
      var _ = this;
      this.$store.commit("setEditId", objId);
      this.$router.push({
        name: _.pageObj.detailRouter
      });
    },
    // 展示刪除對話框
    toDelOne(objId) {
      this.deleteObj.delOneId = objId;
      this.deleteObj.delDialogVisible = true;
    },
    // 刪除一個
    delOne() {
      let _ = this;
      const url = this.$A.role + "/" + this.deleteObj.delOneId;
      _.$H.delete(_, url, function () {
        // TODO
        _.deleteObj.delDialogVisible = false;
        _.$U.success(_, "刪除成功!");
        _.initList();
      });
    },
    selectVal() {
      this.pageObj.pageParmas.pageNum = 0;
      this.initList();
    },
    // 初始化列表
    initList() {
      let _ = this;
      clearTimeout(_.listLooper);
      this.pageObj.loading = true;
      // if (this.$U.notEmpty(type)) {
      //   this.pageObj.pageParmas.pageNum = 0;
      // }
      // 初始化查詢參數(shù)
      this.initQueryParams();
      // TODO
      // _.$H.get(_, _.$A.download.list, _.pageObj.queryParams, function (res) {
      //   _.pageObj.tableData = res.data.data.content;
      //   if (
      //     _.pageObj.tableData.length === 0 &&
      //     _.pageObj.pageParmas.pageNum > 0
      //   ) {
      //     _.pageObj.pageParmas.pageNum--;
      //     _.initList();
      //   } else {
      //     _.pageObj.pageParmas.total = res.data.data.totalElements;
      //     _.pageObj.loading = false;

      //     _.listLooper = setTimeout(() => {
      //       _.initList();
      //     }, 30000);
      //   }
      // });
      _.$H.get(_, _.$A.download.list, _.pageObj.queryParams).then(res => {
        _.pageObj.tableData = res.data.data.content;
        if (
          _.pageObj.tableData.length === 0 &&
          _.pageObj.pageParmas.pageNum > 0
        ) {
          _.pageObj.pageParmas.pageNum--;
          _.initList();
        } else {
          _.pageObj.pageParmas.total = res.data.data.totalElements;
          _.pageObj.loading = false;

          // _.listLooper = setTimeout(() => {
          //   _.initList();
          // }, 30000);
        }

      }).catch(err => {

      })
    },
    // 初始化查詢參數(shù)
    initQueryParams() {
      this.pageObj.queryParams.pageNum = this.pageObj.pageParmas.pageNum || 0;
      this.pageObj.queryParams.pageSize = this.pageObj.pageParmas.pageSize || 10;
      this.pageObj.queryParams.exportType = this.pageObj.pageParmas.exportType || '';
    },
    // 條數(shù)變更
    handleSizeChange(val) {
      this.pageObj.pageParmas.pageSize = val;
      this.initList();
    },
    // 頁碼變更
    handlePageChange(val) {
      this.pageObj.pageParmas.pageNum = val - 1;
      this.initList();
    },
    typeFormat(row, key, value) {
      var typeName = "";
      if (value == "01") {
        typeName = "安裝訂單導(dǎo)出";
      } else if (value == "02") {
        typeName = "配送訂單導(dǎo)出";
      } else if (value == "04") {
        typeName = "結(jié)算導(dǎo)出";
      } else if (value == "09") {
        typeName = "補貼訂單導(dǎo)出";
      } else if (value == "012") {
        typeName = "退回訂單記錄導(dǎo)出";
      } else if (value == "03") {
        typeName = "作廢訂單導(dǎo)出";
      } else if (value == "06") {
        typeName = "報修訂單導(dǎo)出";
      } else if (value == "011") {
        typeName = "投訴訂單導(dǎo)出";
      } else if (value == "013") {
        typeName = "不送樁VIN導(dǎo)出";
      }
      return typeName;
    },
    statusFormat(row, key, value) {
      var statusName = "";
      if (value == 0) {
        statusName = "等待中";
      }
      if (value == 1) {
        statusName = "進行中";
      } else if (value == 2) {
        statusName = "已完成";
      } else if (value == 5) {
        statusName = "失敗";
      }
      return statusName;
    },
    downloadFile: function (blob, fileName) {
      const link = document.createElement("a");
      link.href = window.URL.createObjectURL(blob);
      link.download = fileName;
      // 此寫法兼容可火狐瀏覽器
      document.body.appendChild(link);
      const evt = document.createEvent("MouseEvents");
      evt.initEvent("click", false, false);
      link.dispatchEvent(evt);
      document.body.removeChild(link);
    },
    // 將Base64文件轉(zhuǎn)為 Blob
    buildBlobByByte: function (data) {
      const raw = window.atob(data);
      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]);
    },
    // 二進制數(shù)組 生成文件
    downloadFileByByte: function (data, fileName) {
      const blob = this.buildBlobByByte(data);
      this.downloadFile(blob, fileName);
    },
    // 下載
    toExportPath(obj) {
      let _ = this;
      this.pageObj.loading = true;

      // _.$H.getBlob(
      //   _,
      //   _.$A.exportListDownload + "/" + obj.id,
      //   {},
      //   function (res) {
      // const fileName = _.typeFormat("", "", obj.type);
      // //數(shù)據(jù)轉(zhuǎn)換為文件下載
      // var elink = document.createElement("a");
      // elink.download = fileName;
      // elink.style.display = "none";
      // var blob = new Blob([res.data]);
      // const reader = new FileReader();
      // reader.readAsText(blob); // 以文本形式讀取Blob對象
      // reader.onload = () => {
      //   const jsonStr = reader.result; // 獲取讀取的內(nèi)容
      //   const jsonData = JSON.parse(jsonStr); // 將JSON格式的字符串轉(zhuǎn)換為JavaScript對象

      //   const fileBase64 = jsonData.data.base64;

      //   _.downloadFileByByte(fileBase64, fileName + ".xlsx");
      // };

      // _.pageObj.loading = false;
      //   }
      // );
      _.$H.getBlob(_, _.$A.download.export, {
        id: obj.id,
        exportType: obj.exportType
      }).then(res => {
        console.log(res.data)
        // const fileName = _.typeFormat("", "", obj.type);
        const fileName =  obj.exportTypeName +  Date.now();
        //數(shù)據(jù)轉(zhuǎn)換為文件下載
        var elink = document.createElement("a");
        elink.download = fileName;
        elink.style.display = "none";
        var blob = new Blob([res.data]);
        const reader = new FileReader();
        reader.readAsText(blob); // 以文本形式讀取Blob對象
        reader.onload = () => {
          const jsonStr = reader.result; // 獲取讀取的內(nèi)容
          const jsonData = JSON.parse(jsonStr); // 將JSON格式的字符串轉(zhuǎn)換為JavaScript對象

          const fileBase64 = jsonData.data.base64;

          _.downloadFileByByte(fileBase64, fileName + ".xlsx");
        };

        _.pageObj.loading = false;
      }).catch(err => {

      })
    }
  },
  mounted() {
    this.init();
  },
  beforeDestroy() {
    clearTimeout(this.listLooper);
  }
};
</script>

3.請求封裝文章來源地址http://www.zghlxwxcb.cn/news/detail-754080.html

// get 請求
http.getBlob = function (vm, url, params) {
    return new Promise((resolve, reject) => {
        axios
            .get(url, {
                params: params || {},
                headers: {
                    'Content-Type': 'application/json;charset=UTF-8',
                    authorization: vm.$store.state.token,
                    responseType: 'blob'
                },
                timeout: config.httpTimeOut,
                responseType: 'blob'
            })
            .then(res => {
                resolve(res)
            })
            .catch(err => {
                custErrFun(vm, err)
            })
    })
}
// postBlob 請求
http.postBlob = function (vm, url, params) {
    return new Promise((resolve, reject) => {
        axios
            .post(url, params, {
                headers: {
                    'Content-Type': 'application/json;charset=UTF-8',
                    authorization: vm.$store.state.token,
                    responseType: 'blob'
                },
                timeout: config.httpTimeOut,
                responseType: 'blob'
            })
            .then(res => {
                custResponseFun(vm, res, resolve)
            })
            .catch(err => {
                custErrFun(vm, err)
            })
    })
}

到了這里,關(guān)于后端返回base64文件前端如何下載的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • java和js實現(xiàn)前端加密后端解密,后端加密前端解密(Base64)

    目錄 1.前端加密后端解密 2.后端加密前端解密 在前端和后端數(shù)據(jù)傳輸時,常常涉及到隱私數(shù)據(jù)的傳輸(例如用戶名和密碼),這時,我們就需要對隱私數(shù)據(jù)進行加密解密 1.前端加密后端解密 ????????1.1 前端jquery實現(xiàn) ????????1.2后端 2.后端加密前端解密 ? ? ? ? 2.1后端加密

    2024年02月16日
    瀏覽(30)
  • 前端用 js-file-download組件下載后端返回的pdf,word,excel文件

    后端返回的pdf,word,excel的文件流導(dǎo)出需要讓瀏覽器下載文件 1、安裝js-file-download組件 2、在對應(yīng)的頁面引用 3、在接口返回結(jié)果后直接調(diào)用即可

    2024年02月08日
    瀏覽(96)
  • 后端如何返回一個(圖片)文件流,并在前端vue展示。

    后端如何返回一個(圖片)文件流,并在前端vue展示。

    后端部分可分為三步: 1,獲取文件參數(shù)(非必須,根據(jù)自己情況添加) 2,獲取文件 3,以流形式返回 具體代碼如下: 前端展示部分。 1,首先在你的axios接口上添加 responseType:\\\'blob\\\' ,以表示你將以blob形式接收(必須添加)。 2,拿到接口返回值后,將其轉(zhuǎn)為blob形式 此時打

    2024年02月11日
    瀏覽(25)
  • 【vue2】前端實現(xiàn)下載后端返回的application/octet-stream文件流

    1、下載csv/txt時 此時無須修改接口的響應(yīng)格式 2、下載Excel時,需要修改一下接口的響應(yīng)格式為blob 另

    2024年02月11日
    瀏覽(108)
  • js根據(jù)base64下載文件

    js根據(jù)base64下載文件

    項目中有個下載模板的需求,接口直接給返回的是一個base64,如圖 這里的bytes不是流格式,而是一個base64格式的,這就導(dǎo)致我們需要先將base64轉(zhuǎn)為了流,然后通過new Blob方式下載文件就行,下面看代碼 定義了一個base64轉(zhuǎn)二進制流的方法,接下來開始根據(jù)得到的二進制流下載文

    2024年02月17日
    瀏覽(20)
  • Vue3 - 詳細實現(xiàn)下載從服務(wù)端返回的文件流 Blob 對象教程,前端下載后端接口返回的文件流并自動保存到本地,支持任何格式的文件下載(從后端拿到二進制文件流 Blob 對象,前端實現(xiàn)點擊下載功能)

    Vue3 - 詳細實現(xiàn)下載從服務(wù)端返回的文件流 Blob 對象教程,前端下載后端接口返回的文件流并自動保存到本地,支持任何格式的文件下載(從后端拿到二進制文件流 Blob 對象,前端實現(xiàn)點擊下載功能)

    調(diào)用服務(wù)端(后端)接口拿到文件流,通過前端下載并保存到本地。 本文 實現(xiàn)了在 vue3 項目中,通過后端接口返回的二進制文件流 Blob 對象,在前端進行點擊下載并保存到用戶本地,任何格式的文件都可以輕松下載, 保證您直接復(fù)制代碼,改個請求地址就可以使用了, 如下

    2024年02月04日
    瀏覽(174)
  • 后端返回文件流,前端怎么導(dǎo)出、下載

    后端返回文件流,前端怎么導(dǎo)出、下載

    ? ? ? ? 工作中肯定有很多導(dǎo)出excel、下載文件這種功能。一般都是后端做好,我們?nèi)フ埱髮?yīng)的接口就行了,前端還需要做一些處理就可以實現(xiàn)導(dǎo)出、下載功能了。具體怎么操作呢,我們來看看! ? ? ? ? 我們在請求的時候 需要定義responseType【響應(yīng)類型】為blob類型,如果

    2024年02月12日
    瀏覽(26)
  • 后端返回URL,前端如何實現(xiàn)下載

    1. 在實際開發(fā)過程中,實現(xiàn)文件下載功能,后端一般是返回一個文件流,我們只需要拿到這個文件流后,再使用 new Blob轉(zhuǎn)化成blob格式 的數(shù)據(jù),然后 創(chuàng)建一個a鏈接元素 進行下載就行了: (“本段代碼是之前寫案例時從別處copy的,都有注釋省了自己寫,哈哈哈,侵刪”) 2. 但

    2024年02月04日
    瀏覽(27)
  • 前端處理后端返回的文件流,進行文件下載

    前端處理后端返回的文件流,進行文件下載

    二進制流格式 ?Blob格式 前言: ? ? ? ? 需求:根據(jù)后端接口返回的文件流進行數(shù)據(jù)處理,并實現(xiàn)文件的下載,且下載文件為word文檔. 封裝下載文件接口: 最開始沒帶 responseType:\\\"Blob\\\" ,進行文件下載后,里面的內(nèi)容全部是亂碼!??! 代碼實現(xiàn): ?知識點補充: ? ? ? ? 1、n

    2024年02月07日
    瀏覽(93)
  • 前端 img圖片如何 展示 base64 格式(并且下載到本地)

    前端 img圖片如何 展示 base64 格式(并且下載到本地)

    如題:最近在做項目發(fā)現(xiàn)頁面上有些圖片是動態(tài)獲取的,也就是后臺給我們返回圖片的存放地址,一般都是放在服務(wù)器上的某個位置,我們直接拿到渲染一下就行了,(前提是不存在跨域問題), 但是由于項目特殊性,后臺使用了Python 渲染出來的圖片是svg格式的圖片,并且

    2024年02月09日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包