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

1.后端返回base64格式文件
在這里插入圖片描述

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="請選擇導出類型" @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><!--表格區--><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="導出類型" min-width="150" align="center"></el-table-column><el-table-column prop="operationalName" label="狀態" 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><!--分頁區--><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 結算導出 3 訂單導出},Config: config},deleteObj: {// 刪除對話框 屬性delDialogVisible: false, // 是否顯示刪除對話框delOneId: "" // 刪除單個ID},listLooper: null,options: [{value: 2,label: '結算導出'}, {value: 3,label: '訂單導出'}]};},methods: {init() {if (Object.keys(this.$route.query).length > 0) {//從訂單和結算頁面帶值過來this.pageObj.pageParmas.exportType = this.$route.query.type;console.log(this.pageObj.pageParmas.exportType)}// 初始化面包屑this.$store.commit("setBreadCrumbList", [{ type: 'title', name: '主數據' },{ type: 'title', name: '下載中心' }]);this.initList();},// 跳轉新增頁面toAdd() {var _ = this;this.$store.commit("setEditId", "");this.$router.push({name: _.pageObj.detailRouter});},// 跳轉編輯頁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;// }// 初始化查詢參數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 => {})},// 初始化查詢參數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 || '';},// 條數變更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 = "安裝訂單導出";} else if (value == "02") {typeName = "配送訂單導出";} else if (value == "04") {typeName = "結算導出";} else if (value == "09") {typeName = "補貼訂單導出";} else if (value == "012") {typeName = "退回訂單記錄導出";} else if (value == "03") {typeName = "作廢訂單導出";} else if (value == "06") {typeName = "報修訂單導出";} else if (value == "011") {typeName = "投訴訂單導出";} else if (value == "013") {typeName = "不送樁VIN導出";}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文件轉為 BlobbuildBlobByByte: 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]);},// 二進制數組 生成文件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);// //數據轉換為文件下載// 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; // 獲取讀取的內容//   const jsonData = JSON.parse(jsonStr); // 將JSON格式的字符串轉換為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();//數據轉換為文件下載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; // 獲取讀取的內容const jsonData = JSON.parse(jsonStr); // 將JSON格式的字符串轉換為JavaScript對象const fileBase64 = jsonData.data.base64;_.downloadFileByByte(fileBase64, fileName + ".xlsx");};_.pageObj.loading = false;}).catch(err => {})}},mounted() {this.init();},beforeDestroy() {clearTimeout(this.listLooper);}
};
</script>

3.請求封裝

// 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)})})
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207746.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207746.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207746.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一文搞懂什么是Hadoop

Hadoop概念 什么是Hadoop Hadoop是一個由Apache基金會所開發的用于解決海量數據的存儲及分析計算問題的分布式系統基礎架構。 廣義上來說&#xff0c;Hadoop通常指一個跟廣泛的概念——Hadoop生態圈。 以下是hadoop生態圈中的技術&#xff1a; Hadoop優勢 hadoop組成 HDFS…

一個不錯的文章偽原創系統程序源碼

一款文章偽原創系統程序源碼免費分享&#xff0c;程序是站長原創的。 一共花了站長幾天時間寫的這個文章偽原創平臺&#xff0c;程序無需數據庫。 程序前端采用BootStrap框架搭建&#xff0c;后端采用PHP原生書寫。 前端偽原創采用Ajax無刷新提交&#xff0c;Ajax轉換到詞庫…

TCPUDP使用場景討論

將鏈路從TCP改為UDP會對通信鏈路產生以下影響和注意事項&#xff1a; 可靠性&#xff1a;UDP是無連接的協議&#xff0c;與TCP相比&#xff0c;它不提供可靠性保證和重傳機制。因此&#xff0c;當將鏈路從TCP改為UDP時&#xff0c;通信的可靠性會降低。如果在通信過程中丟失了U…

【爬取二手車并將數據保存在數據庫中】

爬取二手車并將數據保存在數據庫中 查看網頁結構分析爬取步驟解密加密信息將密文解密代碼&#xff1a; 進行爬取&#xff1a;爬取函數寫入解密文件函數和獲取城市函數解密文件&#xff0c;返回正確字符串函數保存到數據庫 運行結果 查看網頁結構分析爬取步驟 可以看出網頁使用…

C 語言 變量

變量初始值 全局變量&#xff1a;初始值是 0 局部變量&#xff1a;初始值是 隨機的 類型限定符 通常不需要顯式使用 register 關鍵字來優化變量的存儲和訪問。 關鍵字 _Complex和_Imaginary分別用于表示復數和虛數&#xff08;二者皆是數學概念&#xff09; 變量的聲明和定義 c…

蘋果 macOS 14.1.2 正式發布 更新了哪些內容?

蘋果今日向 Mac 電腦用戶推送了 macOS 14.1.2 更新&#xff08;內部版本號&#xff1a;23B92 | 23B2091&#xff09;&#xff0c;本次更新距離上次發布隔了 28 天。 需要注意的是&#xff0c;因蘋果各區域節點服務器配置緩存問題&#xff0c;可能有些地方探測到升級更新的時間略…

webWorker解決單線程中的一些小問題和性能優化

背景 js是單線程這是大家都知道&#xff0c;為了防止多個線程同時操作DOM&#xff0c;這個導致一個復雜的同步問題。比如&#xff0c;假定JavaScript同時有兩個線程&#xff0c;一個線程在某個DOM節點上添加內容&#xff0c;另一個線程刪除了這個節點&#xff0c;這時瀏覽器應…

全局平均池化的示例

1.對一個3通道&#xff0c;5*5的矩陣&#xff0c;進行全局平均池化 每個矩陣的大小都是 5x5&#xff0c;假設這些矩陣代表一幅圖像的三個不同通道。為簡單起見&#xff0c;我們將這三個矩陣分別稱為 A、B 和 C。合成圖像將是一個三通道圖像&#xff0c;每個通道由其中一個矩陣…

計算機方向的一些重要縮寫和簡介

參考&#xff1a; 深度學習四大類網絡模型 干貨|機器學習超全綜述&#xff01; 機器學習ML、卷積神經網絡CNN、循環神經網絡RNN、馬爾可夫蒙特卡羅MCMC、生成對抗網絡GAN、圖神經網絡GNN——人工智能經典算法 MLP&#xff08;Multi Layer Perseption&#xff09;用在神經網絡中…

這是最后的戰役了

不變因子 初等因子 行列式因子 smith標準型 酉矩陣 H-陣等等 A H A A^H A AHA 就是 H-陣 正定H陣的性質 若 A A A 為正定的H-陣. 存在可逆矩陣 Q Q Q&#xff0c; 使得 A Q H Q AQ^H Q AQHQ.存在 P P P, 使得 P H A P I P^HAPI PHAPI.A的特征值大于0. Q ? 1 A Q Q^{…

駕馭蘋果的人工智慧模式:克服反擊與應對挑戰

蘋果一年一度的秋季「春晚」時間越來越近&#xff0c;但在大模型浪潮下&#xff0c;蘋果何時推出自己的「蘋果GPT」成了另一個關注的話題。 畢竟&#xff0c;前有華為&#xff0c;后有小米&#xff0c;在中國手機廠商爭相將大模型裝進移動終端的同時&#xff0c;蘋果卻依舊對A…

微服務學習:Ribbon實現客戶端負載均衡,將請求分發到多個服務提供者

Ribbon是Netflix開源的一個基于HTTP和TCP客戶端負載均衡器。它主要用于在微服務架構中實現客戶端負載均衡&#xff0c;將請求分發到多個服務提供者上&#xff0c;從而實現高可用性和擴展性。 Ribbon的主要特點包括&#xff1a; 客戶端負載均衡&#xff1a;Ribbon是一個客戶端負…

【算法題】找出符合要求的字符串子串(js)

題解&#xff1a; function solution(str1, str2) {const set1 new Set([...str1]);const set2 new Set([...str2]);return [...set1].filter((item) > set2.has(item)).sort();}console.log(solution("fach", "bbaaccedfg"));//輸入:fach// bbaacced…

手機上寫工作總結用什么軟件好?借助工作筆記輕松寫出優秀年終總結

隨著年底的臨近&#xff0c;撰寫個人年終工作總結成為了許多職場人士的重要任務。因為手機是每個上班族都要隨身攜帶的電子設備&#xff0c;所以想要抽時間來寫年終工作總結&#xff0c;使用手機是比較便捷的。那么&#xff0c;在手機上寫工作總結應該使用什么軟件呢&#xff1…

Linux 環境下的性能測試——top與stress

對于Linux 環境&#xff0c;top命令是使用頻繁且信息較全的命令&#xff0c; 它對于所有正在運行的進行和系統負荷提供實時更新的概覽信息。stress是個簡單且全面的性能測試工具。通過它可以模擬各種高負載情況。 通過top與stress這兩個命令的結合使用&#xff0c;基本可以達到…

軟件測試——單元測試

單元測試是軟件開發中的一種測試方法&#xff0c;用于驗證軟件中的各個獨立單元&#xff08;通常是函數、方法或類&#xff09;是否按照設計規范正常工作。以下是進行單元測試的一般步驟和最佳實踐&#xff1a; 1. 選擇測試框架 選擇適合項目的測試框架&#xff0c;例如&…

SHAP:Python的可解釋機器學習庫

SHAP:Python的可解釋機器學習庫 一、概念二、步驟三、代碼-以波士頓房價為例summary_plotFeature Importanceshap_interaction_valuesdependence_plot完整代碼一、概念 SHAP(Shapley Additive Explanations)模型是一種用于解釋機器學習模型預測結果的方法。它基于合作博弈論…

【C++】類和對象——explicit關鍵字,友元和內部類

這篇博客已經到了類和對象的最后一部分了&#xff0c;下面我們先看一下explicit關鍵字 我們還是先來引入一個例子&#xff0c;我們的代碼是可以這么寫的 class A { public:A(int aa 0) {_a aa;cout << "A(int aa 0)" << endl;} private:int _a; }; i…

紅隊攻防實戰之Redis-RCE集錦

心若有所向往&#xff0c;何懼道阻且長 Redis寫入SSH公鑰實現RCE 之前進行端口掃描時發現該機器開著6379&#xff0c;嘗試Redis弱口令或未授權訪問 嘗試進行連接Redis&#xff0c;連接成功&#xff0c;存在未授權訪問 嘗試寫入SSH公鑰 設置redis的備份路徑 設置保存文件名 …

[GXYCTF2019]禁止套娃1

提示 git泄露無參數rce &#xff01;&#xff01;注意需要python3環境 github里dirsearch工具下載位置 ###可能需要開節點才能打開 百度網盤dirsearch下載地址 ###如果github里下載不了可以在網盤下載 提取碼sx5d 只給了flag在哪里呢&#xff0c;那么應該就是要讓…