注意请求时要设置responseType,不加会中文乱码,被这个坑困扰了大半天。。。
axios post请求:
    download(index,row){
var ts = this;
axios.post(this.paths.baseURL+'file/downloadFile',
{path:row.zurl},
{responseType: 'blob'}
).then(msg => {
console.log(msg.data)
let link = document.createElement("a");
link.style.display = "none";
link.href = window.URL.createObjectURL(new Blob([msg.data]));
link.setAttribute("download",row.zurl.substring(row.zurl.lastIndexOf("/")+1));//完整文件名称
document.body.appendChild(link);
link.click();
URL.revokeObjectURL(link.href);
document.body.removeChild(link);
}).catch(error =>{
ts.$message.error('下载文件失败')
})
}
后台接口:

    @RequestMapping(value = "downloadFile",method = RequestMethod.POST,produces = {"application/json;charset = utf-8"})
@ApiOperation(notes = "下载",value = "下载")
// @RequiresPermissions("file:download")
public ResponseEntity<byte[]> downloadFile(@RequestBody Map<String,Object> map) throws IOException {
String path = map.get("path").toString();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment",path.substring(path.lastIndexOf("/")+1));
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(new File(path)),headers, HttpStatus.CREATED);
}
axios get请求下载
        axios.get(this.paths.baseURL+'risk/excelRisk',
{responseType: 'blob'}
).then((msg) => {
console.log(msg)
let url = window.URL.createObjectURL(new Blob([msg.data]));
let link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', '未评估风险数据.xls')
document.body.appendChild(link)
link.click()
}).catch((error) => {
console.log(error)
this.$message({
type:'error',
message:'服务器异常'
})
})
    @GetMapping(value = "excelRisk",produces = {"application/octet-stream;charset=utf-8"})
//@RequiresRoles("risk:list")
public void excelRisk(HttpServletResponse response) {
try {
Map<String,Object> map = new HashMap<String,Object>();
Workbook workbook = RiskExcel.wpgRisk(riskService.excelRisk(map),"excelTemplate/risk_1.xlsx");
OutputStream out=response.getOutputStream();
response.setHeader("Content-Type","application/vnd.ms-excel");
response.addHeader("Content-Disposition","attachment;filename=为评估数据.xmls");
response.setContentType("application/octet-stream");
response.setCharacterEncoding("UTF-8");
workbook.write(out);
} catch (Exception e) {
e.printStackTrace();
}
}
 

vue axios post请求下载文件,后台springmvc完整代码的更多相关文章

  1. vue element多文件多格式上传文件,后台springmvc完整代码

       template:        <el-upload               class="upload-demo"               ref=&quo ...

  2. 如何使用post请求下载文件

    使用get请求下载文件非常简便,但是get请求的url有长度和大小的限制,所以当请求参数非常多时无法满足需求,所以改成post请求const res = await fetch('xxxxxxxxx' ...

  3. springboot整合vue实现上传下载文件

    https://blog.csdn.net/yhhyhhyhhyhh/article/details/89888953 文章目录 springboot整合vue实现上传下载文件 1上传下载文件api文 ...

  4. axios通过post请求下载文件/图片

    我们平常下载文件一般都是通过get请求直接访问进行下载, 但是当有特殊情况如权限控制之类的会要求我们通过post请求进行下载,这时就不一样了, 具体方法是通过协调后端,约定返回的文件流,请求的resp ...

  5. 把页面上的图表导出为pdf文件,分享一种请求下载文件的方法

    最近客户提出一个需求,就是把页面上的图表导出为pdf文件. 找了很多资料.终于有了点头绪.最主要是参考了HighCharts的做法.http://www.hcharts.cn/ 实现原理:把页面图表的 ...

  6. vue axios get请求参数为json对象 而非字符串形式

    axios get请求方式 传递给后台的参数都是字符串下形式,无法传递json对象 或数组对象等    post请求方式则可以实现,   但若后台接口要求必须用get方式传递对象给后台,需要装插件,实 ...

  7. 细说vue axios登录请求拦截器

    当我们在做接口请求时,比如判断登录超时时候,通常是接口返回一个特定的错误码,那如果我们每个接口都去判断一个耗时耗力,这个时候我们可以用拦截器去进行统一的http请求拦截. 1.安装配置axios cn ...

  8. vue axios 数据请求实现

    1.安装nginx npm install axios --save-dev cnpm install axios --save-dev 使用淘宝镜像 保存依赖文件到本地 装好了.packjson.j ...

  9. post请求下载文件,获取Content-Disposition文件名

    1.post下载文件代码,doload方法 import request from "../../src/utils/request"; import { API } from & ...

随机推荐

  1. effective-java学习笔记---使用实例属性替代序数35

    永远不要从枚举的序号中得出与它相关的值; 请将其保存在实例属性中: public enum Ensemble { SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUIN ...

  2. adb的基本安装和介绍(一)

    一,什么是adb? adb全称为Android Debug Bridge,就是起到调试桥的作用.顾名思义,adb就是android sdk 的一个工具 借助adb工具,我们可以管理设备或手机模拟器的状 ...

  3. algorithm++:一个整数称为是:【幸运数】,如果这个整数的各位数字的平方和为1或者反复计算各位数字的平方和为1 例如 19 是个幸运数

    1):一个整数称为是:[幸运数],如果这个整数的各位数字的平方和为1或者反复计算各位数字的平方和为1 例如 19 是个幸运数 coding:java程序实现 import org.junit.Test ...

  4. python 开发工具简介

    一.python 开发工具简介 1.IDLE IDLE是开发python程序的基本IDE(集成开发环境),具备基本的IDE的功能,是非商业Python开发的不错的选择.当安装好python以后,IDL ...

  5. 面试:给我说说你平时是如何优化MySQL的?

    面试:给我说说你平时是如何优化MySQL的? 1.explain 在MySQL优化的时候.我们使用最多的是explain查看 SQL 的执行计划 类型 解释 type 连接类型.一个好的SQL语句至少 ...

  6. JS 剑指Offer(四) 从尾到头打印链表

    题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 首先定义一下链表中的节点,关于链表这个数据结构在另外一篇文章中会详细讲 function ListNode(val) { t ...

  7. 封装属于自己的Python包

    将自己的程序打包为whl/tar.gz文件 有时候自己写了一个开发基本类,我们把这个类打包为whl或者tar.gz文件,这样的话同事也可以使用自己开发的基本类了 安装setuptools pip in ...

  8. js定时器及定时器叠加问题

    回武汉隔离的第二天打卡,武汉加油,逆战必胜!今天想和大家简单聊一下js定时器的问题. 1.setTimeout 延时器 在指定时间后执行一次,注意只会执行一次 当然有的时候我们想用延时器做出定时器的效 ...

  9. minIO分布式集群搭建+nginx负载均衡

    暂时关闭防火墙 systemctl stop firewalld 查看防火墙状态 systemctl status firewalld 赋予最高权限 chmod +x minio !/bin/bash ...

  10. C语言:signed和unsigned的区别

    参考博客:https://blog.csdn.net/wen381951203/article/details/79922220 signed和unsigned用于修饰整数类型(包括char,从ANS ...