当前位置 > it书童 > 编程 > 正文

axios post 请求下载 excel 文件

编程 it书童 2020-04-29 22:01:16 0赞 0踩 275阅读 0评论

需求

技术栈如下

  • 前端 vue+element

  • 后端 php 框架 laravel

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

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

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

解决

万能的 stackoverflow 给出了标准答案

代码如下:

前端:

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()
})

后端:

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

如果是返回已经生成的 excel 文件,如存放在项目根目录的 data 目录下,实现方式如下:

public function downloadSale()
{
    $file = '../data/test.log';
    return response()->download($file);
}
转载须注明出处:https://www.itshutong.com/articles/500/axis-post-requests-to-download-excel-file
关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
发表评论
我有句话,不知当讲不当讲?
要讲之前请先 登录