vue-实现文件下载

15 篇文章 0 订阅

1.利用浏览器的导出功能

window.location.href = 服务器文件路径

相当于后端告诉前端文件的地址,直接使用浏览器去下载

2.以流的形式下载文件 

查了一些资料,主要用的代码如下,原文章:入口

在此基础上增加了params,以传参

// 下载模板
    handleExportTem () {
      this.btnSendTem = true
      // 加载loading
      this.loading = true
      this.loadingText = '正在导出模板...'
      this.$axios({
        baseURL: './',
        url: 'xx',
        method: 'post',
        responseType: 'blob', // 服务器返回的数据类型
        params: { // 其他参数
          excel: 'excel02'
        },
        data: {}
      }).then((res) => {
        // 关闭loading
        this.loading = false
        console.log(res)
        // 此处有个坑。这里用content保存文件流,最初是content=res,但下载的test.xls里的内容如下图1,
        // 检查了下才发现,后端对文件流做了一层封装,所以将content指向res.data即可
        // 另外,流的转储属于浅拷贝,所以此处的content转储仅仅是便于理解,并没有实际作用=_=
        const content = res.data
        const blob = new Blob([content]) // 构造一个blob对象来处理数据
        const fileName = 'monthAssess.xlsx' // 导出文件名
        // 对于<a>标签,只有 Firefox 和 Chrome(内核) 支持 download 属性
        // IE10以上支持blob但是依然不支持download
        if ('download' in document.createElement('a')) { // 支持a标签download的浏览器
          const link = document.createElement('a') // 创建a标签
          link.download = fileName // a标签添加属性
          link.style.display = 'none'
          link.href = URL.createObjectURL(blob)
          document.body.appendChild(link)
          link.click() // 执行下载
          URL.revokeObjectURL(link.href) // 释放url
          document.body.removeChild(link) // 释放标签
        } else { // 其他浏览器
          navigator.msSaveBlob(blob, fileName)
        }
        this.btnSendTem = false
      }).catch((error) => {
        console.log(error)
        // 关闭loading
        this.loading = false
        this.btnSendTem = false
      })
    },

 

  • 13
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值