在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 相关文章推荐
JQuery在光标位置插入内容的实现代码
Jun 18 Javascript
javascript中创建对象的三种常用方法
Dec 30 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
Aug 01 Javascript
基于javascript实现句子翻牌网页版小游戏
Mar 23 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
Jun 13 Javascript
Bootstrap CSS组件之导航(nav)
Dec 17 Javascript
Angular 4.x中表单Reactive Forms详解
Apr 25 Javascript
Vue列表页渲染优化详解
Jul 24 Javascript
Vue的MVVM实现方法
Aug 16 Javascript
浅谈Vue render函数在ElementUi中的应用
Sep 06 Javascript
JavaScript实现表单注册、表单验证、运算符功能
Oct 15 Javascript
详解基于mpvue微信小程序下载远程图片到本地解决思路
May 16 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
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
php统计文章排行示例
2014/03/04 PHP
php表单处理操作
2017/11/16 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
基于jquery的实现简单的表格中增加或删除下一行
2010/08/01 Javascript
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
基于jquery实现左右按钮点击的图片切换效果
2021/01/27 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
利用jquery获取select下拉框的值
2016/11/23 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
小程序选项卡以及swiper套用(跨页面)
2020/06/19 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
python图像和办公文档处理总结
2019/05/28 Python
Python PyInstaller库基本使用方法分析
2019/12/12 Python
python Manager 之dict KeyError问题的解决
2019/12/21 Python
Python虚拟环境库virtualenvwrapper安装及使用
2020/06/17 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
使用django自带的user做外键的方法
2020/11/30 Python
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
法制宣传实施方案
2014/03/13 职场文书
医德医风演讲稿
2014/05/20 职场文书
经营理念口号
2014/06/21 职场文书
商铺消防安全责任书
2014/07/29 职场文书
房地产经营管理专业自荐信
2014/09/02 职场文书
党的作风建设心得体会
2014/10/22 职场文书
五年级小学生评语
2014/12/26 职场文书
房地产项目合作意向书
2015/05/08 职场文书
聘任合同书
2015/09/21 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书
python 逐步回归算法
2021/04/06 Python
Python打包为exe详细教程
2021/05/18 Python
Java中使用Filter过滤器的方法
2021/06/28 Java/Android
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android