axios post 请求下载 excel 文件

2020-05-04 14:38:23 浏览数 (1)

需求

技术栈如下

  • 前端 vue element
  • 后端 php 框架 laravel

需要通过 axios 发送 post 请求下载 excel 文件

服务器的 excel 文件生成工具用的是 laravel 扩展包 Laravel Excel

默认情况下,axios 是不会自动下载服务端返回的 excel 文件的,有些同学直接绕过 axios,用 a 链接请求文件,虽然能下载,但这样有安全隐患。谁都可以下载文件,在权限认证方面会有些麻烦,即使能实现权限控制,也是蹩脚的实现方式

解决

万能的 stackoverflow 给出了标准答案

代码如下:

前端:

代码语言:javascript复制
this.$http.post('/export-excel', {}, { responseType: 'blob' }).then(function (response) {
    const url = window.URL.createObjectURL(new Blob([response.data]))
    const link = document.createElement('a')
    link.href = url
    link.setAttribute('download', '导出报表.xlsx')
    document.body.appendChild(link)
    link.click()
})

后端:

代码语言:javascript复制
public function exportExcel()
{
    // 具体用法请参考 laravel-excel 文档
    return Excel::download(new ExcelExport(), "导出报表.xlsx");
}

0 人点赞