springmvc中下载中文文件名称为下划线的解决方案
作者:我想要的都有啊 发布时间:2023-11-25 22:28:53
标签:springmvc,下载,中文文件名,下划线
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


猜你喜欢
- 本文主要介绍了WPF中常用的鼠标事件、键盘事件以及注意事项,同时使用一个案例讲解了拓展事件。除此之外,本文还讲述如何用行为(Behavior
- 前言:根据ThreadPoolExecutor的构造方法,JDK提供了很多工厂方法来创建各种用途的线程池.1 newFixedThreadP
- 大家好,我叫柠檬水,今天马上就要放假,突然想到自己以前的伙伴、同学,好像想到他们空间没怎么发过动态,难道是把我屏蔽了吗,好友又那么多,行吧,
- 在C#中,在处理字符串拼接的时候,使用StringBuilder的效率会比硬拼接字符串高很多。到底有多高,如下:static void Ma
- 目录前言HuTool 中的一些常用工具类日期相关 API随机工具图片工具彩色转换成黑白添加文字水印加密解密工具布隆过滤器邮件工具HTML 工
- 赛马下周一就要去做java实验了,还记得上一次实验还有一个程序没写完,匆匆交了实验报告的半成品(希望老师没发现www)。为了下周一能有更充裕
- 概述引入多态是继封装、继承之后,面向对象的第三大特性。 生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样的。再比如飞的动作,昆虫、鸟类
- 一、关于Spring Cache缓存在现在的应用中越来越重要,Spring从3.1开始定义了org.springframework.cach
- 命名空间using EnvDTE;using EnvDTE80;private DTE2 _applicationObject;
- 前景概要在这个之前service_edu子模块下的功能是没有任何问题,创建了service_oss子模块之前失败了很多次,影响到了之前原本正
- 一、JVM 类加载机制JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。1. 加载:加载是类
- 参考: https://gist.github.com/laispace/666dd7b27e9116faece6前提是你本地有 socks
- 最近做项目有这样的需求: 在activity中启动一个dialog时, 启动的dialog的背景设为启动acitivity的模糊化图片.实现
- 使用python和java实现数独游戏,有比较才有收获哦。1、Python版#--coding:utf-8--import ra
- 这篇文章主要介绍了Java实现TCP/IP协议的收发数据(服务端)代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参
- 今天在做项目的时候突然遇到一个问题:启动服务器的时候spring没报错,可是当我访问某个页面的时候spring报Request bean i
- 前言以键值对Dictionary<[key], [value]>形式存值,和哈希表很像也是一种无序的结构。要使用Dictiona
- 通过本篇文章主要给大家讲解了在JAVA开发中Servlet3.0异步处理遇到的问题以及处理办法,以下是具体内容:Servlet 3.0 开始
- 本文实例讲述了C#正则表达式匹配与替换字符串功能。分享给大家供大家参考,具体如下:事例一:\w+=>[A-Za-z1-9_],\s+=
- 简介上一篇我们讲了简单的动态BroadCast,今天我们通过手工来发送一条BroadCast进一步来了解BroadCast。在上一篇里我们使