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

Vue導入excel表,導入失敗的數(shù)據(jù)自動下載

 更新時間:2021年11月25日 10:46:54   作者:前端不釋卷leo  
本文詳細講解了Vue導入excel表,導入失敗的數(shù)據(jù)自動下載的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

有這么一個需求:一個導入按鈕,點擊按鈕導入excel表,如果excel表中部分數(shù)據(jù)導入失敗,則自動下載該部分導入失敗數(shù)據(jù)的excel表,如果全部導入成功,則提示“導入成功”。

首先附上ElementUI的上傳文件組件

Element - The world's most popular Vue UI framework

Element,一套為開發(fā)者、設計師和產(chǎn)品經(jīng)理準備的基于 Vue 2.0 的桌面端組件庫

https://element.eleme.cn/#/zh-CN/component/upload

官網(wǎng)詳細介紹upload組件的屬性和使用方法,就不展開了,這里主要通過使用它實現(xiàn)開篇的導入excel表的需求。(在vue項目中需要引入ElementUI庫,詳細步驟請查閱官網(wǎng))

1、引入ElementUI上傳組件upload

<el-upload
  class="upload-demo"
  action="https://jsonplaceholder.typicode.com/posts/"
  multiple
  :auto-upload="false"
  :file-list="fileList"
  :on-change="fileChange">
  <el-button type="primary">導入</el-button>
</el-upload>

頁面效果

屬性介紹

屬性 說明 類型
action 必選參數(shù),上傳的地址 string
multiple 是否支持多選文件 boolean
auto-upload 是否在選取文件后立即進行上傳 boolean
auto-upload我們設置為false,避免自動上傳,以便使用自定義上傳方式。
file-list 上傳的文件列表, 例如: [{name: 'food.jpg', url: 'https://xxx.cdn.com/xxx.jpg'}] array
on-change 文件狀態(tài)改變時的鉤子,添加文件、上傳成功和上傳失敗時都會被調用 function(file, fileList)

2、點擊導入按鈕,選擇文件(點擊“打開”觸發(fā)on-change)

此時可以通過fileChange方法在控制臺打印查看文件結構

fileChange(file,fileList){
  console.log(file,'file')
  console.log(fileList,'fileList')
}

3、此時我們已經(jīng)拿到選擇的文件,可以自定義上傳方式,將其發(fā)送至后端服務器

fileChange(file,fileList){
  console.log(file,'file')
  console.log(fileList,'fileList')
  let url = 'xxx'  //后端服務器API
  let headers = {
    'Content-Type':'multipart/form-data'   //自定義上傳時,該請求頭參數(shù)必填
  }
  let formData = ''
  for(let i = 0;i < fileList.length;i++){  //遍歷文件數(shù)組,fileList有可能存在多個文件
    formData = new FormData()
    formData.append('name',fileList[i].name)
    formData.append('type','.xlsx')
    formData.append('file',fileList[i].raw)
  }
  this.$axios({
    headers: headers,
    method: 'post',
    data: formData,
    url: url,
    responseType:'blob'   //該參數(shù)必填,不然下載下來的excel表會提示文件損壞,無法打開
  }).then(res=>{
    if(res && res.data.size == 0){
      //若后臺不返回流,說明全部數(shù)據(jù)導入成功,提示“導入成功”,不自動下載
      return
    }
    //如果后臺返回流,說明部分數(shù)據(jù)導入失敗,則自動下載導入失敗數(shù)據(jù)的excel表
    let name = '導入失敗數(shù)據(jù).xlsx'     //自定義下載excel表名
    let blob = new Blob([res.data])
    let url = window.URL.createObjectURL(blob)
    let aLink = document.createElement('a')
    aLink.style.display = 'none'
    aLink.href = url
    //download 屬性定義了下載鏈接的地址。href 屬性必須在 <a> 標簽中指定。
    aLink.setAttribute('download',name) 
    document.body.appendChild(aLink)
    aLink.click()
    document.body.removeChild(aLink)
    window.URL.revokeObjectURL(url)
    //下載結束之后可以執(zhí)行其他操作,如刷新列表、友好提示等
  })
}

方法解析

formData是ajax2.0(XMLHttpRequest Level2)新提出的接口,利用FormData對象可以將form表單元素的namevalue進行組合,實現(xiàn)表單數(shù)據(jù)的序列化,從而進行表單元素的拼接,提高工作效率。appendFormData 中添加新的屬性值,如果FormData 對應的屬性值存在則覆蓋原值,否則新增一項屬性值。

Blob 對象表示一個不可變、原始數(shù)據(jù)的類文件對象。它的數(shù)據(jù)可以按文本或二進制的格式進行讀取,也可以轉換成 ReadableStream來用于數(shù)據(jù)操作。?

URL.createObjectURL() 靜態(tài)方法會創(chuàng)建一個 DOMString,其中包含一個表示參數(shù)中給出的對象的URL。這個 URL 的生命周期和創(chuàng)建它的窗口中的 document綁定。這個新的URL 對象表示指定的 File對象或 Blob對象。

URL.revokeObjectURL() 靜態(tài)方法用來釋放一個之前已經(jīng)存在的、通過調用 URL.createObjectURL() 創(chuàng)建的 URL 對象。當你結束使用某個 URL 對象之后,應該通過調用這個方法來讓瀏覽器知道不用在內存中繼續(xù)保留對這個文件的引用了。

總結:以上實現(xiàn)了自定義導入excel表,且自動下載接口返回的流,代碼可以直接使用,但是請注意返回的數(shù)據(jù)response不一定與我的相同,具體看聯(lián)調接口的返回數(shù)據(jù)。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • vue中keep-alive組件的用法示例

    vue中keep-alive組件的用法示例

    眾所周知keep-alive是Vue提供的一個抽象組件,主要是用來對組件進行緩存,從而做到節(jié)省性能,這篇文章主要給大家介紹了關于vue中keep-alive組件用法的相關資料,需要的朋友可以參考下
    2021-05-05
  • VUE+Canvas實現(xiàn)財神爺接元寶小游戲

    VUE+Canvas實現(xiàn)財神爺接元寶小游戲

    這篇文章主要介紹了VUE+Canvas實現(xiàn)財神爺接元寶小游戲,需要的朋友可以參考下本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-04-04
  • Vuerouter的beforeEach與afterEach鉤子函數(shù)的區(qū)別

    Vuerouter的beforeEach與afterEach鉤子函數(shù)的區(qū)別

    本文詳細的介紹了Vuerouter的beforeEach與afterEach鉤子函數(shù)的區(qū)別和使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • vue項目設置打包后的靜態(tài)文件訪問路徑

    vue項目設置打包后的靜態(tài)文件訪問路徑

    這篇文章主要介紹了vue項目設置打包后的靜態(tài)文件訪問路徑,vue項目的最終項目文件需要經(jīng)過打包輸出,靜態(tài)文件的訪問路徑需要在vue.config.js文件中設置,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • vue源碼解析之事件機制原理

    vue源碼解析之事件機制原理

    這篇文章主要介紹了vue源碼解析之事件機制原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Vue入門之數(shù)量加減運算操作示例

    Vue入門之數(shù)量加減運算操作示例

    這篇文章主要介紹了Vue入門之數(shù)量加減運算操作,結合實例形式分析了vue.js基本數(shù)值運算相關操作技巧,需要的朋友可以參考下
    2018-12-12
  • vue使用gitshot生成gif問題

    vue使用gitshot生成gif問題

    這篇文章主要介紹了vue使用gitshot生成gif問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • setTimeout在vue中的正確使用方式

    setTimeout在vue中的正確使用方式

    這篇文章主要介紹了setTimeout在vue中的正確使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue實現(xiàn)不定高虛擬列表的示例詳解

    vue實現(xiàn)不定高虛擬列表的示例詳解

    這篇文章主要為大家詳細介紹了在vue環(huán)境單頁面項目下,如何實現(xiàn)不定高虛擬列表,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-10-10
  • vue3集成bpmn.js詳細代碼示例

    vue3集成bpmn.js詳細代碼示例

    bpmn.js是一個BPMN2.0渲染工具包和web建模器,使得畫流程圖的功能在前端來完成,這篇文章主要給大家介紹了關于vue3集成bpmn.js的相關資料,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2024-01-01

最新評論