vue axios ts 封装流文件下载方法
vue axios ts 封装流文件下载方法
// 定义文件下载的接口
interface DOWNFILETYPE {url: string; //请求地址method: string; //请求方式params: object; //请求参数filename?: string; //文件名称type: string; //文件类型
}
文件下载方法实现
function downloadFile(options: DOWNFILETYPE): any {const { url, method, params, filename, type } = options;let config = {url: url,baseURL: baseURL.baseURL,method: method,responseType: "blob",headers: {"X-Access-Token": getStore("token") ? getStore("token") : "",},};if (method == "get") {config["params"] = params;} else {config["data"] = params;}axios(config).then((response) => {let data = response.data;// 请求失败,后台返回jsonif (data && data.type && data.type.includes("application/json")) {let reader = new FileReader();reader.onload = function (event) {let result: any = reader.result;let message = JSON.parse(result).message;//错误处理(Message as any).closeAll();Message.error(message || "");};reader.readAsText(data);return true;}//请求成功,下载文件const content: any = data;const blob = new Blob([content], { type: "application/octet-stream" });let file_name = filename ? filename + type : response.headers["content-disposition"] ?decodeURIComponent(response.headers["content-disposition"].split("filename=")[1]) :"导出文件" + typeif ("download" in document.createElement("a")) {// 非IE下载const elink = document.createElement("a");elink.download = file_name;elink.style.display = "none";elink.href = window.URL.createObjectURL(blob);document.body.appendChild(elink);elink.click();URL.revokeObjectURL(elink.href);document.body.removeChild(elink);} else {// IE10+下载navigator.msSaveBlob(blob, file_name);}});
}
需要注意的点:
axios拦截器对返回流类型的设置
axios.interceptors.response.use(function(response) {console.log("Response", response)if (response.status == 200) {let responseData = response.dataif (response.config.responseType == "blob") {return response;}return responseData} else {return {}}},function(error) {}
)
vue axios ts 封装流文件下载方法相关推荐
- vue axios全局封装请求 和 vue三种js跳转页面方式
axios全局封装请求 第一步在src文件下新建api文件 文件下新建request.js文件 // 导入axios import axios from "axios"; // 进 ...
- vue axios 简单封装以及思考
先安装 axios npm install axios axios的详细介绍以及用法 就不多说了请 移步 github ➡️ https://github.com/axios/axios 下面是简单 ...
- vue axios 实现 文件流下载(前后端分离跨域问题的解决)
前端代码 后端以流的形式返回 单个文件下载 @RequestMapping(value = "download", method = RequestMethod.POST)@Api ...
- vue 后端返回二进制流文件,前端如何实现下载?
目录 1. axios 请求二进制流文件导出文件 1.1 后台返回的二进制流: 1.2 使用: 1.3 需要注意以下几点: 2. 关于 arraybuffer 和 blob 2.1 ArrayBuff ...
- vue+axios方法封装(restful,ajax)
this.$get({url: '',data: {},success: (data) => {}}) import qs from 'qs'// axios网络请求 function ajax ...
- vue项目请求封装;axios封装使用
vue项目,封装axios请求方式和响应状态码:以及接口的api封装: 目录结构: 1.具体在src/utils/request.js下封装axios: ①引入axios和router ②引入elem ...
- vue axios封装 获取微信公众号用户的openid
目录 axios封装 openid vue vue+ts axios封装 一般会在项目的src目录中,新建一个文件夹,作为网络请求模块,用来封装axios, 创建axios实例: axios.crea ...
- 在项目中用ts封装axios
写在前面 虽然说Fetch API已经使用率已经非常的高了,但是在一些老的浏览器还是不支持的,而且axios仍然每周都保持2000多万的下载量,这就说明了axios仍然存在不可撼动的地位,接下来我们就 ...
- vue中Axios的封装与API接口的管理详解
一:axios的封装 vue项目中,和后台交互获取数据这块,我们通常使用的是axios库,它是promise的http库,可运行在浏览器端和node.js中. 安装 npm install axios ...
- vue如何封装请求接口方法
vue如何封装请求接口方法 方法一 首先创建一个server.js文件 引入axios和qs //引入axios和qs插件 import axios from 'axios' import qs fr ...
最新文章
- MVC中获取模型属性的Range和StringLength验证特性设置
- linux命令——tar
- 【数字信号处理】周期序列 ( 正弦序列特性 | 单个模拟周期采集 m 个数字样本 | Q 个模拟周期采集 P 个数字样本 | 非周期序列的情况 | 数字信号周期 )
- TABLES ABOUT CRM MARTETING
- Boost:bind绑定和数据成员以及高级用途的测试程序
- 经典C语言程序100例之一零零
- 数据库面试题【十四、主键使用自增ID还是UUID】
- zabbix3监控ESXI主机
- react学习(61)--js contact
- 吃透理财三句话人人都能成百万富翁
- web前端效率提升之浏览器与本地文件的映射-遁地龙卷风
- 通信原理笔记(樊昌信第七版)
- html页面小宠物代码大全,宠物店网页设计html代码
- Stata 15详细安装步骤
- html输入框只能输入整数,轻松让INPUT框只能输入整数
- 寻找IT行业中的引爆点
- …… ᵇᵘᵗ ᵗʰᵃᵗ ʸᵒᵘ ˡᵒᵛᵉ ⁿᵒ ᵒⁿᵉ 【transshipment】
- laravel中guard是什么
- DNF史诗计算机最新版,dnf全职业史诗装备搭配计算器2020
- 程序人生 - 详解微星笔记本几大系列
热门文章
- 爬去当当热销图书信息
- Android实现ping功能
- js调用html文件上传,JavaScript里的文件上传API
- CSDN-markdown编辑器语法——背景色
- 重置mysql数据库密码_重置mysql数据库密码的方法
- 微信小程序中使用icon
- nxlog管理配置linux,IIS服务器配置NXLog进行syslog转发(并解决GMT+8小时时差问题)...
- 肖维勒准则matlab_肖维勒准则.PPT
- 拉扎维模拟CMOS集成电路设计python建模工程——利用matplotlib绘制NMOS与PMOS转移特性曲线
- W型加密栅栏密码解密