- 要求导出excel文件,前端触发,后端直接返回文件, 记录一下遇到的问题与方法。
使用axios + blob + a标签
- 方法
- 前端使用axios 拿到二进制文件流
- 从headers里的 Content-Disposition 提取文件名
- 创建一个a 标签 触发下载行为
- 前端代码
1 | let params = {"file": 'a.xlsx'} |
- 问题
- 网上基本都是这么写的,但是问题来了, 我从headers里拿不到content-disposition ,检索了一下,可以用
getResponseHeader
方法试试
- 网上基本都是这么写的,但是问题来了, 我从headers里拿不到content-disposition ,检索了一下,可以用
1 | console.log(res.request.getResponseHeader("Content-Disposition")); |
1 | # 以Djnago 为例 |
-
正确添加Header后,axios 就可以正常工作了。
-
总结:
- 提出正确的问题,问题就解决了一半了
- google + stackoverflow 是程序员的第一生产力。如果不是,就是提问的关键词不对\( ̄▽ ̄)/.
通过URL 直接下载
- 使用
window.open(url)
触发浏览器的下载行为 (在新窗口打开链接)