在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实现窗口抖动效果
Jan 03 Javascript
总结javascript中的六种迭代器
Aug 16 Javascript
轻松搞定js表单验证
Oct 13 Javascript
基于JS实现的随机数字抽签实例
Dec 08 Javascript
支持移动端原生js轮播图
Feb 16 Javascript
vue-cli webpack 开发环境跨域详解
May 18 Javascript
JS实现的DOM插入节点操作示例
Apr 04 Javascript
jQuery实现仿京东防抖动菜单效果示例
Jul 06 jQuery
JavaScript时间与时间戳的转换操作实例分析
Dec 07 Javascript
微信小程序websocket聊天室的实现示例代码
Feb 12 Javascript
小程序input数据双向绑定实现方法
Oct 17 Javascript
iview实现动态表单和自定义验证时间段重叠
Jan 10 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
Function eregi is deprecated (解决方法)
2013/06/21 PHP
MongoDB在PHP中的常用操作小结
2014/02/20 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
php封装的图片(缩略图)处理类完整实例
2016/10/19 PHP
php语言注释,单行注释和多行注释
2018/01/21 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
ArrayList类(增强版)
2007/04/04 Javascript
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
Javascript 学习笔记 错误处理
2009/07/30 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
vue2.0 路由不显示router-view的解决方法
2018/03/06 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
vue日历/日程提醒/html5本地缓存功能
2019/09/02 Javascript
React Hooks 实现和由来以及解决的问题详解
2020/01/17 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
Python聚类算法之DBSACN实例分析
2015/11/20 Python
如何利用Fabric自动化你的任务
2016/10/20 Python
Python中的连接符(+、+=)示例详解
2017/01/13 Python
python自动裁剪图像代码分享
2017/11/25 Python
Django 使用Ajax进行前后台交互的示例讲解
2018/05/28 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
Python 基于jwt实现认证机制流程解析
2020/06/22 Python
python3实现简单飞机大战
2020/11/29 Python
用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
2012/11/25 面试题
Sql面试题
2013/03/20 面试题
校园联欢晚会主持词
2014/03/17 职场文书
欢度春节标语
2014/07/01 职场文书
学生旷课检讨书500字
2014/10/28 职场文书
离婚协议书格式范本
2016/03/18 职场文书
Java基于字符界面的简易收银台
2021/06/26 Java/Android