博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
axios前后端分离下载文件
阅读量:6458 次
发布时间:2019-06-23

本文共 1247 字,大约阅读时间需要 4 分钟。

写vue项目用的axios库,在处理下载文件的时候,发现后端返回的是文件流,无法直接下载,只能用a标签处理,但是对于有鉴权的下载,a标签显然是不合适的了。于是乎就查阅各种资料各种鼓捣终于搞出来了

axios请求下载

请求下载的时候设置responseType为blob,例如:

export function apiDownloadFiles(fielId) {  return axios({    url: `/document/${fielId}`,    method: 'get',    responseType: 'blob'  })}复制代码

这样请求就会走axios拦截器里配置的方法,你就可以给下载添加请求头token了

请求后获取到的文件流如何下载到本地呢?

后端返回了的文件流是这样的

这个时候要怎么处理才能变成文件呢?

apiDownloadFiles(file.id).then(res => {          if (res.data.type === "application/json") {            this.$message({              type: "error",              message: "下载失败,文件不存在或权限不足"            });          } else {            let blob = new Blob([res.data]);            if (window.navigator.msSaveOrOpenBlob) {              navigator.msSaveBlob(blob, file.fileName);            } else {              let link = document.createElement("a");              let evt = document.createEvent("HTMLEvents");              evt.initEvent("click", false, false);              link.href = URL.createObjectURL(blob);               link.download = file.fileName;              link.style.display = "none";              document.body.appendChild(link);              link.click();              window.URL.revokeObjectURL(link.href);            }          }        });复制代码

模拟a标签点击,成功下载文件。

转载地址:http://riizo.baihongyu.com/

你可能感兴趣的文章
子程序框架
查看>>
多维数组元素的地址
查看>>
maven的错误记录
查看>>
数据库运维体系_SZMSD
查看>>
aspose 模板输出
查看>>
福大软工1816 · 第三次作业 - 结对项目1
查看>>
selenium多个窗口切换
查看>>
《单页面应用》所获知识点
查看>>
静态库 调试版本 和发布版本
查看>>
DB2 错误码解析
查看>>
读书笔记四
查看>>
JAVA中的finalize()方法
查看>>
慕课网学习手记--炫丽的倒计时效果Canvas绘图与动画基础
查看>>
==与equals()的区别
查看>>
TCP三次握手四次挥手相关问题探讨
查看>>
基本分类方法——KNN(K近邻)算法
查看>>
在XenCenter6.2中构建CentOS7虚拟机的启动错误
查看>>
.NET Framework3.0/3.5/4.0/4.5新增功能摘要
查看>>
php中表单提交复选框与下拉列表项
查看>>
熟悉常用的Linux操作
查看>>