在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 相关文章推荐
Prototype使用指南之hash.js
Jan 10 Javascript
javascript:以前写的xmlhttp池,代码
May 18 Javascript
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
Dec 02 Javascript
Javascript拓展String方法小结
Jul 08 Javascript
用json方式实现在 js 中建立一个map
May 02 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
Aug 20 Javascript
Bootstrap每天必学之弹出框(Popover)插件
Apr 25 Javascript
深入理解jquery中的each用法
Dec 14 Javascript
JS实现加载时锁定HTML页面元素的方法
Jun 24 Javascript
详解使用React制作一个模态框
Mar 14 Javascript
微信小程序导航栏跟随滑动效果的实现代码
May 14 Javascript
Echarts动态加载多条折线图的实现代码
May 24 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)
2013/06/21 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
解决laravel 表单提交-POST 异常的问题
2019/10/15 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
js 单引号 传递方法
2009/06/22 Javascript
Jquery submit()无法提交问题
2013/04/21 Javascript
jQuery焦点图切换特效插件封装实例
2013/08/18 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
简单的渐变轮播插件
2017/01/12 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
2018/12/11 jQuery
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
python实现用户登录系统
2016/05/21 Python
100行python代码实现跳一跳辅助程序
2018/01/15 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
2019/05/27 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
Tensorflow累加的实现案例
2020/02/05 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
什么是python的列表推导式
2020/05/26 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
工程专业求职自荐书范文
2014/02/08 职场文书
亲子运动会的活动方案
2014/08/17 职场文书
关于有小孩的离婚协议书
2014/10/26 职场文书
土建施工员岗位职责
2015/04/11 职场文书
奖励申请报告范文
2015/05/15 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书
golang 实用库gotable的具体使用
2021/07/01 Golang
Win11如何修改dns?Win11修改dns图文教程
2022/01/18 数码科技