在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 相关文章推荐
JS 用6N±1法求素数 实例教程
Oct 20 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
May 24 Javascript
JS+CSS实现简单滑动门(滑动菜单)效果
Sep 19 Javascript
js点击文本框弹出可选择的checkbox复选框
Feb 03 Javascript
Bootstrap安装环境配置教程分享
May 27 Javascript
jquery select插件异步实时搜索实例代码
Oct 20 jQuery
浅谈Node模块系统及其模式
Nov 17 Javascript
Vue数据监听方法watch的使用
Mar 28 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
Sep 29 Javascript
Vue.js轮播图走马灯代码实例(全)
May 08 Javascript
vue中 this.$set的用法详解
Sep 06 Javascript
Vue强制组件重新渲染的方法讨论
Feb 03 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 在线翻译函数代码
2009/05/07 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
2010/03/04 Javascript
js下利用控制器载入对应脚本
2010/07/17 Javascript
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
JavaScript单元测试ABC
2012/04/12 Javascript
jQuery中change事件用法实例
2014/12/26 Javascript
javascript作用域问题实例分析
2015/07/13 Javascript
js简单设置与使用cookie的方法
2016/01/22 Javascript
JS实现重新加载当前页面
2016/11/29 Javascript
Bootstrap基本组件学习笔记之列表组(11)
2016/12/07 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
2017/04/13 Javascript
详解通过JSON数据使用VUE.JS
2017/05/26 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
在vscode中统一vue编码风格的方法
2018/02/22 Javascript
vue组件name的作用小结
2018/05/23 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
js实现随机点名
2021/01/19 Javascript
Python的Bottle框架中获取制定cookie的教程
2015/04/24 Python
python中文分词教程之前向最大正向匹配算法详解
2017/11/02 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
numpy.meshgrid()理解(小结)
2019/08/01 Python
pytorch实现线性拟合方式
2020/01/15 Python
pytorch中使用cuda扩展的实现示例
2020/02/12 Python
python中字典增加和删除使用方法
2020/09/30 Python
HTML5实现视频直播功能思路详解
2017/11/16 HTML / CSS
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
最好的商品表达自己:Cafepress
2019/09/04 全球购物
销售心得体会
2014/01/02 职场文书
项目考察欢迎辞
2014/01/17 职场文书
安全例会汇报材料
2014/08/23 职场文书
学校开除通知书
2015/04/25 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电