java(前后端交互) - 使用ajax请求下载excel后文件无法打开?

本文探讨了前端通过Ajax请求后台模板文件下载时遇到的乱码问题,重点讲述了两种解决方法:一是利用window.location.href直接下载,二是设置响应类型为blob并创建下载链接。同时提供了后端EasyExcel响应配置代码。
摘要由CSDN通过智能技术生成

1.问题如下:

1.1 后台直接用get请求地址在浏览器访问可以下载;
1.2 跟前台交互后, 也是可以下载的, 但是一直无法打开! ( 查看响应结果为乱码 )
在这里插入图片描述

2.问题分析:

前端是直接通过ajax进行请求的,因为服务器端已经通过文件的形式响应给前端所以没有任何的json数据返回需要进行接收, 故无法下载;

3.解决办法:

①使用window.location.href = ‘url’;的方式进行请求,问题得到解决.

window.location.href = "http://localhost/down/template"; 

②设置响应类型: responseType: ‘blob’ ( 本人使用, 考虑到安全问题. )

axios({
	  url: '/down/template',
	  method: 'get',
	  responseType: 'blob'
}).then(res => {
	  const url = window.URL.createObjectURL(new Blob([res.data]));
	  const link = document.createElement('a');
	  link.style.display = 'none';
	  link.href = url;
	  link.setAttribute('download', '文件名称.xlsx');
	  document.body.appendChild(link);
	  link.click();
	  document.body.removeChild(link);
}).catch(err => {
	  console.log(err);
});

============================================================================================
附上后端代码如下:

public static void downTemplate(HttpServletResponse response) {
		response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
		response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("文件名称", "UTF-8") + ".xlsx");
		response.setHeader("Pragma", "public");
		response.setHeader("Cache-Control", "no-store");
		response.addHeader("Cache-Control", "max-age=0");
		
		//使用的easyexcel. 
		Resource resource = new ClassPathResource("123.xlsx");
		ExcelWriter writer = EasyExcel.write(response.getOutputStream()).withTemplate(resource.getInputStream()).build();
		writer.finish();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值