在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.lazyload  实现图片延迟加载jquery插件
Feb 06 Javascript
javascript仿qq界面的折叠菜单实现代码
Dec 12 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
Jan 16 Javascript
JS中多种方式创建对象详解
Mar 22 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
Oct 25 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
Dec 18 Javascript
浅析JS抽象工厂模式
Dec 14 Javascript
浅谈微信小程序flex布局基础
Sep 10 Javascript
JS实现指定区域的全屏显示功能示例
Apr 25 Javascript
Flutter实现仿微信底部菜单栏功能
Sep 18 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
Oct 10 jQuery
vue-resourc发起异步请求的方法
Feb 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的SQL注入过程分析
2012/01/06 PHP
php的socket编程详解
2016/11/20 PHP
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
JQuery.closest(),parent(),parents()寻找父结点
2012/02/17 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
2013/04/25 Javascript
js获取select标签选中值的两种方式
2014/01/09 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
通过webpack引入第三方库的方法
2018/07/20 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
微信公众平台 发送模板消息(Java接口开发)
2019/04/17 Javascript
vue下使用nginx刷新页面404的问题解决
2019/08/02 Javascript
解决vue-router 嵌套路由没反应的问题
2020/09/22 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
Python命令行参数解析模块optparse使用实例
2015/04/13 Python
python学生信息管理系统
2018/03/13 Python
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
python基于pdfminer库提取pdf文字代码实例
2019/08/15 Python
PyTorch中Tensor的拼接与拆分的实现
2019/08/18 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
对python中 math模块下 atan 和 atan2的区别详解
2020/01/17 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
爱之链教学反思
2014/04/30 职场文书
模特大赛策划方案
2014/05/28 职场文书
中学生社会实践活动总结
2014/07/03 职场文书
教师自我剖析材料
2014/09/29 职场文书
医院领导班子四风问题对照检查材料
2014/10/26 职场文书
利用js实现简单开关灯代码
2021/11/23 Javascript
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技