在vue中使用axios实现post方式获取二进制流下载文件(实例代码)


Posted in Javascript onDecember 16, 2019

需求

点击导出下载表格对应的excel文件

在 vue 项目中,使用的 axios ,后台 java 提供的 post 接口 api

实现

第一步,在 axios 请求中加入参数,表示接收的数据为二进制文件流

responseType: 'blob'

第二步,在拿到数据流之后,把流转为指定文件格式并创建a标签,模拟点击下载,实现文件下载功能

let blob = res.data
let reader = new FileReader()
reader.readAsDataURL(blob)
reader.onload = (e) => {
 let a = document.createElement('a')
 a.download = fileName
 a.href = e.target.result
 document.body.appendChild(a)
 a.click()
 document.body.removeChild(a)
}

问题

使用 axios 会出现无法拿到 java 后端给出的 Content-Disposition 中的文件名

注意的是,浏览器中可以看到header中有信息,但是无法通过 axios 的 res.header 获取到

在vue中使用axios实现post方式获取二进制流下载文件(实例代码) 

这种情况需要后端设置 header

Access-Control-Expose-Headers: Content-Disposition

有可能后端加了之后还是获取不到,那么让后端单独加一个fileName字段即可

response.setContentType("multipart/form-data");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename=" + UUID.randomUUID().toString() + ".xlsx");
response.setHeader("FileName", UUID.randomUUID().toString() + ".xlsx");
response.setHeader("Access-Control-Expose-Headers", "FileName")

总结

完整的 axios 代码

axios.post({
 url:`url`,
 method:`post`,
 responseType: 'blob'
}).then(res => {
 let blob = res.data
 let reader = new FileReader()
 reader.readAsDataURL(blob)
 reader.onload = (e) => {
  let a = document.createElement('a')
  a.download = `fileName.xlsx`
  a.href = e.target.result
  document.body.appendChild(a)
  a.click()
  document.body.removeChild(a)
 }
})

ps:vue-axios的使用方法(简单易懂)

1.vue-axios插件的安装

使用 npm:

$ cnpm install axios

2.在main.js中添加(添加到原型链上)

import axios from 'axios';
Vue.prototype.axios = axios;

完活,然后就可以随便在任何组件开始用了,耶!^-^!

例子:

this.axios.post('http://ai.yiche.com/web/ability/nlu/standardTokenizer', {
     "text": "动效如果有跟评审结论有出入的地方或者不清楚的地方,随时沟通哈~"
    }).then(function(res) {
     console.log(res.data);
    }).catch(function(err) {
     if (err.response) {
      console.log(err.response)
     }
    });

以上所述是小编给大家介绍的在vue中使用axios实现post方式获取二进制流下载文件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
javascript ready和load事件的区别示例介绍
Aug 30 Javascript
JavaScript中的console.trace()函数介绍
Dec 29 Javascript
JavaScript中的类数组对象介绍
Dec 30 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
Oct 10 Javascript
JavaScript模仿Pinterest实现图片预加载功能
Oct 25 Javascript
浅析Ajax语法
Dec 05 Javascript
详解node nvm进行node多版本管理
Oct 21 Javascript
laravel5.3 vue 实现收藏夹功能实例详解
Jan 21 Javascript
seajs下require书写约定实例分析
May 16 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
Oct 12 Javascript
如何实现双向绑定mvvm的原理实现
May 28 Javascript
vue 移动端记录页面浏览位置的方法
Mar 11 Javascript
js实现计时器秒表功能
Dec 16 #Javascript
原生Vue 实现右键菜单组件功能
Dec 16 #Javascript
axios如何取消重复无用的请求详解
Dec 15 #Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
Dec 15 #Javascript
Angular6项目打包优化的实现方法
Dec 15 #Javascript
vue+elementUI组件table实现前端分页功能
Nov 15 #Javascript
Vue+ElementUI table实现表格分页
Dec 14 #Javascript
You might like
PHP开发中常用的8个小技巧
2008/08/27 PHP
PHP 翻页 实例代码
2009/08/07 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
php创建多级目录的方法
2015/03/24 PHP
php给图片添加文字水印方法汇总
2015/08/27 PHP
php生成微信红包数组的方法
2019/09/05 PHP
jquery 可排列的表实现代码
2009/11/13 Javascript
js导出table到excel同时兼容FF和IE示例
2013/09/03 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
jQuery表格排序组件-tablesorter使用示例
2014/05/26 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
jQuery图片渐变特效的简单实现
2016/06/25 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
vue.js评论发布信息可插入QQ表情功能
2017/08/08 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
2018/10/20 Javascript
微信小程序修改数组长度的问题的解决
2019/12/17 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
vue3.0 上手体验
2020/09/21 Javascript
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
python实现同时给多个变量赋值的方法
2015/04/30 Python
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
python并发编程之线程实例解析
2017/12/27 Python
Python实现的栈(Stack)
2018/01/26 Python
python 3.6.4 安装配置方法图文教程
2018/09/18 Python
详解用python写网络爬虫-爬取新浪微博评论
2019/05/10 Python
简单了解python反射机制的一些知识
2019/07/13 Python
django实现用户注册实例讲解
2019/10/30 Python
Python APScheduler执行使用方法详解
2020/12/10 Python
Python实现区域填充的示例代码
2021/02/03 Python
开工庆典邀请函范文
2014/01/16 职场文书
博士生专家推荐信
2014/09/26 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python
MySQL 数据库 增删查改、克隆、外键 等操作
2022/05/11 MySQL