springmvc中下载中文文件名称为下划线的解决方案
作者:我想要的都有啊 时间:2023-11-25 22:28:53
springmvc下载中文文件名称为下划线
springboot项目中,在下载文件的时候,通过封装ResponseEntity,将文件流写入body,这种下载文件的方式,造成了下载的文件名为正文显示为下划线的形式;
这个问题很好解决
直接将输入的文件名的编码格式定义成GBK格式;
如下代码
public static ResponseEntity<FileSystemResource> export(File file) throws UnsupportedEncodingException {
if (file == null) {
return null;
}
//这个位置对文件名进行编码
String fileName = new String (file.getName().getBytes("GBK"),"ISO-8859-1");
HttpHeaders headers = new HttpHeaders();
headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
headers.add("Content-Disposition", "attachment; filename=" +fileName);
headers.add("Pragma", "no-cache");
headers.add("Expires", "0");
headers.add("Last-Modified", new Date().toString());
headers.add("ETag", String.valueOf(System.currentTimeMillis()));
return ResponseEntity
.ok()
.headers(headers)
.contentLength(file.length())
.contentType(MediaType.parseMediaType("application/octet-stream"))
.body(new FileSystemResource(file));
}
java生成文件名时汉字变为下划线?
public static void exportToExcel(String uid, String name, String htmlText,
HttpServletRequest request, HttpServletResponse response) {
htmlText = htmlText.replaceFirst("<table>", "<tableFirst>");
htmlText = htmlText.replaceAll("<table>",
"<table cellpadding=\"3\" cellspacing=\"0\" border=\"1\" rull=\"all\"
style=\"border-collapse: collapse\">");
htmlText = htmlText.replaceFirst("<tableFirst>", "<table>");
try (OutputStream out = response.getOutputStream()) {
String fileName = name+ "_" + DateUtils.getNow("yyyyMMddHHmmss");
// fileName = new String(fileName.getBytes(),"utf-8")+ ".xls";
if ("large".equals(htmlText)) {
ReportingPo report = reportingService.getByUid(uid);
Map<String, Object> formParameters = generationService.getFormParameters(request.getParameterMap(),
report.getDataRange());
ReportTable reportTable = generationService.getReportTable(report, formParameters);
htmlText = reportTable.getHtmlText();
}
// response.reset();
response.addHeader("Content-Disposition", "attachment;filename=" +
new String(fileName.getBytes("utf-8"),"iso-8859-1")+ ".xls");
// response.setHeader("Content-Disposition", String.format("attachment; filename=%s", fileName));
response.setContentType("application/vnd.ms-excel; charset=utf-8");
response.setCharacterEncoding("utf-8");
response.addCookie(new Cookie("fileDownload", "true"));
// out.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }); // 生成带bom的utf8文件
out.write(htmlText.getBytes("utf-8"));
out.flush();
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
注意这里两个编码
new String(fileName.getBytes("utf-8"),"iso-8859-1")+ ".xls"
来源:https://blog.csdn.net/weixin_48490821/article/details/116603040
标签:springmvc,下载,中文文件名,下划线
0
投稿
猜你喜欢
easyexcel读取excel合并单元格数据的操作代码
2022-08-26 16:26:21
Java 批量删除Word中的空白段落示例代码
2023-09-17 16:36:53
android使用SwipeRefreshLayout实现ListView下拉刷新上拉加载
2022-07-15 08:39:50
Android 全屏无标题栏的三种实现方法
2022-01-05 03:01:31
java实现点击按钮弹出新窗体功能
2022-02-18 14:39:55
C#使用Json.Net对JSON与对象的序列化与反序列化
2023-04-08 07:22:25
MyBatis3用log4j在控制台输出SQL的方法示例
2023-07-01 07:32:36
Java中clone方法使用笔记
2023-03-26 07:44:38
C#使用System.Net邮件发送功能踩过的坑
2022-09-09 18:16:11
浅析Java中的GC垃圾回收器的意义及与GC的交互
2022-11-10 13:07:05
springboot+nginx+https+linux实现负载均衡加域名访问简单测试
2022-04-26 22:35:13
java从输入流中获取数据并返回字节数组示例
2021-12-08 22:47:36
关于Intellij IDEA中的Version Control问题
2021-12-27 08:42:01
SpringCloud基本Rest微服务工程搭建过程
2023-08-28 16:23:29
详解Spring Boot Security工作流程
2023-12-17 12:23:52
Java线程池并发执行多个任务方式
2023-08-14 16:26:03
Hutool开发利器MapProxy类使用技巧详解
2021-11-10 00:01:35
C#实现自定义单选和复选按钮样式
2022-07-22 04:01:41
解读@RequestBody与post请求的关系
2022-10-07 02:02:51
Springboot配置文件内容加密代码实例
2022-09-13 05:56:09