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

Vue通過(guò)Blob對(duì)象實(shí)現(xiàn)導(dǎo)出Excel功能示例代碼

 更新時(shí)間:2020年07月31日 14:47:47   作者:他好像一條狗啊  
這篇文章主要介紹了Vue通過(guò)Blob對(duì)象實(shí)現(xiàn)導(dǎo)出Excel功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

  不同的項(xiàng)目有不同的導(dǎo)出需求,有些只導(dǎo)出當(dāng)前所顯示結(jié)果頁(yè)面的表格進(jìn)入excel,這個(gè)時(shí)候就有很多插件,比如vue-json-excel或者是Blob.js+Export2Excel.js來(lái)實(shí)現(xiàn)導(dǎo)出Excel功能。但是有些需求因?yàn)閿?shù)據(jù)量太大,成千上萬(wàn)條數(shù)據(jù),所以是需要后端拼接,然后輸出二進(jìn)制流文件,然后前端直接下載,這次我們談?wù)労笳叩淖龇ā?/p>

  Blob對(duì)象表示一個(gè)不可變、原始數(shù)據(jù)的類(lèi)文件對(duì)象,通常我也叫它二進(jìn)制流對(duì)象。我們可以通過(guò)Blob對(duì)象實(shí)現(xiàn)導(dǎo)出Excel功能,先放上代碼:

<el-button @click="exportExcel()">導(dǎo)出</el-button>

<script>
methods: {
 exportExcel(){
  var params={
  XX:xx//額外需要攜帶的請(qǐng)求體
  }
  this.$axios.get('/XX/XX',{
  params: params,
  responseType: 'blob' //首先設(shè)置responseType字段格式為 blob
  }).then(res => {
  console.log(res);
  let blob = new Blob([res], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"}); // 為blob設(shè)置文件類(lèi)型,這里以.xlsx為例
  let url = window.URL.createObjectURL(blob); // 創(chuàng)建一個(gè)臨時(shí)的url指向blob對(duì)象
  let a = document.createElement("a");
  a.href = url;
  a.click();
  // 釋放這個(gè)臨時(shí)的對(duì)象url
  window.URL.revokeObjectURL(url); 
  });
 },
 }
</script>

  'responseType'表示的是服務(wù)器響應(yīng)的數(shù)據(jù)類(lèi)型,可以是'arrayBuffer'、'blob'、'document'、'json'、'txt'、'stream',默認(rèn)為json。axios官方文檔地址:https://www.kancloud.cn/yunye/axios/234845(axios請(qǐng)求配置章節(jié))。

  所以我們接收后臺(tái)傳給前端的二進(jìn)制流之前需要先設(shè)置responseType為blob,否則默認(rèn)會(huì)以json獲取,下載下來(lái)的文件打開(kāi)會(huì)提示文件已損壞??刂婆_(tái)輸出的可以看到是個(gè)正確的Blob對(duì)象,這就說(shuō)明我們的配置是對(duì)的,如圖1所示。

圖1 控制臺(tái)輸出的Blob對(duì)象

  后端最好也要配置response頭的content-type為對(duì)應(yīng)的類(lèi)型,所圖2所示。

圖2 后端設(shè)置了響應(yīng)頭相對(duì)應(yīng)的content-type

  然后,需要給這個(gè)Blob對(duì)象設(shè)置一個(gè)type,這個(gè)type表明改Blob對(duì)象所包含數(shù)據(jù)的MIME類(lèi)型。如果類(lèi)型未知,則該值為空字符串。這里給出幾個(gè)常用文件格式的MIME類(lèi)型:(詳細(xì)的可參考WebAPI官方文檔:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types

擴(kuò)展名----------MIME類(lèi)型

  .csv--------------text/csv

  .jpeg/.jpg-------image/jpeg

  .png-------------image/png

  .rar--------------application/x-rar-compressed

  .doc-------------application/msword

  .docx-----------application/vnd.openxmlformats-officedocument.wordprocessingml.document

  .xls--------------application/vnd.ms-excel

.xlsx------------application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

  .zip--------------application/zip

  在正常的導(dǎo)出請(qǐng)求之后可以看到又發(fā)了一個(gè)新的blob請(qǐng)求,其本質(zhì)是到這個(gè)地址下載文件,如圖3所示:

圖3 創(chuàng)建一個(gè)臨時(shí)的url指向blob對(duì)象

  一般來(lái)說(shuō),這樣就可以實(shí)現(xiàn)下載的功能了。

  這里提點(diǎn)題外話(huà),谷歌瀏覽器下載設(shè)置默認(rèn)為瀏覽器下載默認(rèn)路徑,也就不會(huì)彈出文件框,谷歌瀏覽器下載文件框如圖4所示,也就沒(méi)有了所謂的自定義保存路徑和自定義文件名,如圖5所示,在瀏覽器底部會(huì)有下載提示。

圖4谷歌瀏覽器下載文件框

圖5 谷歌瀏覽器下載會(huì)在屏幕底部顯示

如果想要有下載文件框,請(qǐng)?jiān)谠O(shè)置->高級(jí)->下載內(nèi)容->下載前詢(xún)問(wèn)每個(gè)文件的保存位置中設(shè)置為啟用。

總結(jié)

到此這篇關(guān)于Vue通過(guò)Blob對(duì)象實(shí)現(xiàn)導(dǎo)出Excel功能的文章就介紹到這了,更多相關(guān)vue 通過(guò)blob對(duì)象導(dǎo)出excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談Vue單頁(yè)面做SEO的四種方案

    淺談Vue單頁(yè)面做SEO的四種方案

    Vue SPA單頁(yè)面應(yīng)用對(duì)SEO不友好,當(dāng)然也有相應(yīng)的解決方案,通過(guò)查找資料,大概有以下4種方法,本文就詳細(xì)的介紹一下
    2021-10-10
  • Vue transition過(guò)渡組件詳解

    Vue transition過(guò)渡組件詳解

    我們現(xiàn)在可以了解一下vue的過(guò)渡,vue在插入、更新以及移除DOM元素的時(shí)候,提供了很多不同方式過(guò)渡的效果,如果在css過(guò)渡自動(dòng)應(yīng)用class,在過(guò)渡鉤子函數(shù)中使用JavaScript直接操作DOM就可以了
    2022-08-08
  • 詳解Vue3中偵聽(tīng)器watch的使用教程

    詳解Vue3中偵聽(tīng)器watch的使用教程

    學(xué)過(guò) vue2 的小伙伴們肯定學(xué)習(xí)過(guò)偵聽(tīng)器,主要是用來(lái)監(jiān)聽(tīng)頁(yè)面數(shù)據(jù)或者是路由的變化,來(lái)執(zhí)行相應(yīng)的操作,在 vue3里面呢,也有偵聽(tīng)器的用法,功能基本一樣,本文就來(lái)為大家詳細(xì)講講
    2022-07-07
  • 一步一步實(shí)現(xiàn)Vue的響應(yīng)式(對(duì)象觀測(cè))

    一步一步實(shí)現(xiàn)Vue的響應(yīng)式(對(duì)象觀測(cè))

    這篇文章主要介紹了一步一步實(shí)現(xiàn)Vue的響應(yīng)式(對(duì)象觀測(cè)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Vue.js如何監(jiān)聽(tīng)window窗口尺寸變化

    Vue.js如何監(jiān)聽(tīng)window窗口尺寸變化

    使用VUE開(kāi)發(fā)后臺(tái)項(xiàng)目,后臺(tái)項(xiàng)目需要進(jìn)行后臺(tái)根據(jù)瀏覽器窗口進(jìn)行變化,需要使用vue來(lái)監(jiān)聽(tīng)瀏覽器的窗口變化,這篇文章主要給大家介紹了關(guān)于Vue.js如何監(jiān)聽(tīng)window窗口尺寸變化的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • vue 的 Render 函數(shù)

    vue 的 Render 函數(shù)

    Vue 推薦在絕大多數(shù)情況下使用模板來(lái)創(chuàng)建你的 HTML。然而在一些場(chǎng)景中,你真的需要 JavaScript 的完全編程的能力。這時(shí)你可以用渲染函數(shù),它比模板更接近編譯器。下面就和小編一起來(lái)學(xué)習(xí)下面文章內(nèi)容吧
    2021-09-09
  • vue項(xiàng)目打包為APP,靜態(tài)資源正常顯示,但API請(qǐng)求不到數(shù)據(jù)的操作

    vue項(xiàng)目打包為APP,靜態(tài)資源正常顯示,但API請(qǐng)求不到數(shù)據(jù)的操作

    這篇文章主要介紹了vue項(xiàng)目打包為APP,靜態(tài)資源正常顯示,但API請(qǐng)求不到數(shù)據(jù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • vue3中的ref()詳解

    vue3中的ref()詳解

    ref對(duì)象可以通過(guò).value屬性進(jìn)行修改,修改后的值也是響應(yīng)式的,并且修改后會(huì)觸發(fā)相關(guān)的副作用,這篇文章主要介紹了vue3中的ref(),需要的朋友可以參考下
    2023-05-05
  • vue多頁(yè)面配置詳情

    vue多頁(yè)面配置詳情

    這篇文章主要介紹了vue多頁(yè)面配置,單頁(yè)應(yīng)用這個(gè)概念,是隨著前幾年 AngularJS、React、Ember 等這些框架的出現(xiàn)而出現(xiàn)的。在前面的前言?xún)?nèi)容里,我們?cè)陧?yè)面渲染中講了頁(yè)面的局部刷新,而單頁(yè)應(yīng)用則是使用了頁(yè)面的局部刷新的能力,下面來(lái)看看詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • 一文帶你了解什么是Vue的前端微服務(wù)架構(gòu)(Micro Frontends)

    一文帶你了解什么是Vue的前端微服務(wù)架構(gòu)(Micro Frontends)

    微前端架構(gòu)是一種將大型前端應(yīng)用拆分為多個(gè)小型、獨(dú)立的前端應(yīng)用的架構(gòu)風(fēng)格,每個(gè)小型前端應(yīng)用都可以獨(dú)立部署、獨(dú)立開(kāi)發(fā)和獨(dú)立運(yùn)行,下面我們就來(lái)學(xué)習(xí)一下它的相關(guān)使用吧
    2023-11-11

最新評(píng)論