vue+iview 經過a標籤實現文件下載

vue+iview 經過a標籤實現文件下載vue

方法一:
注意: 若是下載的文件放在本地目錄下,必定要將模板文件放到 public 目錄下,不然因爲權限問題找不到文件
路徑: 項目更目錄--》public--》tpls--》下載模板.xlsios

1.1 直接使用a標籤 + download屬性axios

<a :href="downUrl" target="_blank" :download="downNm">下載{{ downTplNm }}模板</a>

1.2 定義文件下載地址和文件名跨域

methods: {
    type2Obj: function(type){
        switch(type){
        case: 'wl':
            this.downTplNm="白名單",
            this.downUrl = "../tpls/白名單模板.xls",
            this.downNm = "白名單模板.xls"
        }
    } 
}

方法二:
有時候咱們須要將文件下載下來而不是直接打開,使用方法一能夠實現部分文件下載,可是圖片或者PDF等相似文件就會直接打開,這是瀏覽器默認的行爲,有沒有方法阻止這種默認的行爲,點擊a標籤的連接執行的都是下載行爲呢?另外Chrome對跨域下載文件的支持並不友好,這裏提供了一個有效的解決方案:瀏覽器

2.1 使用a標籤綁定事件app

<a @click.prevent="downloadItem(downUrl)" :href="downUrl" >下載{{ downTplNm }}模板</a>

2.2 定義下載方法
避免CORS問題的一種方法是經過XHR請求獲取文件並將文件做爲blob,這裏使用了axios,可是你可以使用你想要的任何libiview

import Axios from 'axios'

methods: {
  downloadItem (url) {
    Axios.get(url, { responseType: 'blob' })
      .then(({ data }) => {
        // 爲了簡單起見這裏blob的mime類型 固定寫死了
        let blob = new Blob([data], { type: 'application/vnd.ms-excel' })
        let link = document.createElement('a')
        link.href = window.URL.createObjectURL(blob)
        link.download = url.split('/').pop()
        link.click()
      .catch(error => {
        console.error(error)
      })
    })
  }
}
相關文章
相關標籤/搜索