获得excel文件流并下载的过程中,下载文件中文名字是空白 (_ .xlsx )
@RequestMapping("/exportExcel")
public void exportExcel(@RequestParam("token") String token,HttpServletResponse response){
try {
String jsonStr = (String) redisTemplate.opsForHash().get(token, "ticketList");
List<LowFareFindTicketVO> list = JSON.parseArray(jsonStr, LowFareFindTicketVO.class);
Workbook workbook = lowFareFindExcelService.writeExcelFile(list);
String fileName = IdGenerator.getTimestamp()+ "_比较后结果.xlsx";
//fileName = URLEncoder.encode(fileName,"utf-8");
response.setHeader("Content-disposition","attachment; filename=" + fileName);
response.setContentType("application/msexcel");
ServletOutputStream servletOut = response.getOutputStream();
workbook.write(servletOut);
} catch (Exception e){
logger.error("#",e);
}
}
原因:header中只支持ASCII
解决办法
在设置fileName的时候进行URL转码
fileName = URLEncoder.encode(fileName,"utf-8");
JS中解决URI 编码问题:
encodeURI() 函数通过将特定字符的每个实例替换为一个、两个、三或四转义序列来对统一资源标识符 (URI) 进行编码 (该字符的 UTF-8 编码仅为四转义序列)由两个 "代理" 字符组成)。
encodeURIComponent()是对统一资源标识符(URI)的组成部分进行编码的方法。它使用一到四个转义序列来表示字符串中的每个字符的UTF-8编码(只有由两个Unicode代理区字符组成的字符才用四个转义字符编码)。
引出:
为什么要对URL进行编码? 打开