需求
技术栈如下
- 前端 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");
}