vue封装通用下载方法

2022年01月15日 阅读数:3
这篇文章主要向大家介绍vue封装通用下载方法,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

vue封装通用下载方法

🪶🪶🪶

​ 最近借助 vueElemenUI 在项目中写下载时,用的是 window.open location.href ,可是页面总会跳转而且显示找不到,不会进行下载,以后从新封装了一种方法,不过是找大佬帮忙的,最核心的代码我到如今还没看明白,但记录下来总归是没错的φ(>ω<*)javascript

⛄⛄⛄

框架使用的 若依管理系统(先后端分离),因此项目中原来有封装好的下载方法,可是行不通,因此换了其它的

下载方法封装

下载方法须要封装在 request.js 中。vue

// 通用下载方法
export function download(url, params, filename) {
  console.log(11111)
  downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", })
  return service.post(url, params, {
    transformRequest: [(params) => { return tansParams(params) }],
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    responseType: 'blob'
  }).then(data => {
    console.log("下载2")
    const isLogin = blobValidate(data);
    if (isLogin) {
      const blob = new Blob([data])
      saveAs(blob, filename)
    } else {
      const resText = data.text();
      const rspObj = JSON.parse(resText);
      const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
      Message.error(errMsg);
    }
    downloadLoadingInstance.close();
  }).catch((r) => {
    console.error(r)
    Message.error('下载文件出现错误,请联系管理员!')
    downloadLoadingInstance.close();
  })
}

全局注册

这里的内容须要写在 main.js 中。java

// main.js
import { download } from "@/utils/request";  // 全局引入
Vue.prototype.download = download  // 全局注册

页面使用

在本身须要的页面中写下载方法。后端

// 下载
down() {
    this.download('/download', {  // 这里是后台给的下载路径
        ...this.query  // 下载时传入的参数
    }, `voucher_template_${new Date().getTime()}.xlsx`)  // 下载的文件名和后缀名
},