From e0a2b95f27b8ce95da88ae132d1baa668f94b522 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Wed, 21 Feb 2024 10:50:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=81=E6=A0=87=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8B=E8=BD=BD=20=E5=93=8D=E5=BA=94?= =?UTF-8?q?=E5=A4=B4=E7=BC=96=E7=A0=81=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 响应头中非ASCII字符需要编码后传入 --- .../controller/ESAnnualInitController.java | 8 +++++++- .../controller/ESAnnualReportController.java | 8 +++++++- .../service/impl/LawsCommonServiceImpl.java | 17 ++++++++++++++--- .../impl/EnterpriseStandardPlanServiceImpl.java | 10 ++++++++-- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java index 99c5e156..ea6bfdd9 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java @@ -28,6 +28,8 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.io.OutputStream; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; @@ -155,7 +157,11 @@ public class ESAnnualInitController { try { ClassPathResource resource = new ClassPathResource("excelTemplate/年度制修订计划(标准化发起)导入模板.xls"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); - response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=年度制修订计划(标准化发起)导入模板.xls"); + response.setCharacterEncoding("UTF-8"); // 这行确保响应流使用UTF-8编码 + + // 处理文件名乱码问题 + String encodedFileName = URLEncoder.encode("年度制修订计划(标准化发起)导入模板", StandardCharsets.UTF_8.name()).replace("+", "%20"); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename*=UTF-8''" + encodedFileName + ".xls"); try (InputStream in = resource.getInputStream(); OutputStream out = response.getOutputStream()) { IOUtils.copy(in, out); diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/controller/ESAnnualReportController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/controller/ESAnnualReportController.java index bcc71c3c..0d7bb8e7 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/controller/ESAnnualReportController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/controller/ESAnnualReportController.java @@ -34,6 +34,8 @@ import java.io.OutputStream; import javax.annotation.Resource; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; @@ -67,7 +69,11 @@ public class ESAnnualReportController { try { ClassPathResource resource = new ClassPathResource("excelTemplate/年度制修订计划(各部门主动上报)导入模板.xls"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); - response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=年度制修订计划(各部门主动上报)导入模板.xls"); + response.setCharacterEncoding("UTF-8"); // 这行确保响应流使用UTF-8编码 + + // 处理文件名乱码问题 + String encodedFileName = URLEncoder.encode("年度制修订计划(各部门主动上报)导入模板", StandardCharsets.UTF_8.name()).replace("+", "%20"); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename*=UTF-8''" + encodedFileName + ".xls"); try (InputStream in = resource.getInputStream(); OutputStream out = response.getOutputStream()) { IOUtils.copy(in, out); diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java index aa45dbad..644e4e9c 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java @@ -62,6 +62,7 @@ import com.jero.modules.tag.enums.FieldShowTypeEnum; import com.jero.modules.tag.enums.LawsFieldTypeEnum; import com.jero.modules.tag.enums.TableNameEnum; import com.jero.modules.tag.service.ILawsAreaService; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.FileUtils; @@ -82,6 +83,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.text.SimpleDateFormat; @@ -1525,6 +1527,7 @@ public class LawsCommonServiceImpl implements ILawsCommonService { * @param tableName */ @Override + @SneakyThrows public void templateDownload(HttpServletResponse response, String tableName) { // 获取全部字段 List fieldList = lawsCommonMapper.getFieldList(tableName); @@ -1550,7 +1553,11 @@ public class LawsCommonServiceImpl implements ILawsCommonService { // 设置HTTP响应头 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); - response.setHeader("Content-Disposition", "attachment; filename=\"导入模板.xlsx\""); + response.setCharacterEncoding("UTF-8"); // 这行确保响应流使用UTF-8编码 + + // 处理文件名乱码问题 + String encodedFileName = URLEncoder.encode("导入模板", StandardCharsets.UTF_8.name()).replace("+", "%20"); + response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName + ".xlsx"); // 获取响应输出流并写入Excel try (OutputStream out = response.getOutputStream()) { @@ -2441,8 +2448,12 @@ public class LawsCommonServiceImpl implements ILawsCommonService { } // 4. 设置HTTP响应头,并返回ZIP文件 - response.setContentType("application/zip"); - response.setHeader("Content-Disposition", "attachment; filename=\"导入模板.zip\""); + response.setContentType("application/zip;charset=UTF-8"); + response.setCharacterEncoding("UTF-8"); // 这行确保响应流使用UTF-8编码 + + // 处理文件名乱码问题 + String encodedFileName = URLEncoder.encode("导入模板", StandardCharsets.UTF_8.name()).replace("+", "%20"); + response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName + ".zip"); // 5. 输出ZIP文件到响应流中 try (OutputStream out = response.getOutputStream()) { diff --git a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/service/impl/EnterpriseStandardPlanServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/service/impl/EnterpriseStandardPlanServiceImpl.java index f2507f73..d052c556 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/service/impl/EnterpriseStandardPlanServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/service/impl/EnterpriseStandardPlanServiceImpl.java @@ -27,6 +27,8 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -112,8 +114,12 @@ public class EnterpriseStandardPlanServiceImpl extends ServiceImpl