瀏覽代碼

批量导入EXCEL模板

cr 2 天之前
父節點
當前提交
c829d728e8

+ 9 - 16
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java

@@ -614,35 +614,28 @@ public class WbsTreeContractController extends BladeController {
             String originalFileName = excelName + ".xlsx";
 
             try {
-                // 1. 先将/替换为其他可接受字符
-                String sanitizedFileName = originalFileName.replace("/", "∕"); // 使用除号符号(U+2215)
-                // 或者使用其他替代字符:
-                // .replace("/", "/")   // 全角斜杠
-                // .replace("/", "-")    // 连字符
-                // .replace("/", " or ") // 文字描述
+                // 1. 先编码所有字符
+                String fullyEncoded = URLEncoder.encode(originalFileName, StandardCharsets.UTF_8.name());
 
-                // 2. 编码其他字符
-                String fullyEncoded = URLEncoder.encode(sanitizedFileName, StandardCharsets.UTF_8.name());
-
-                // 3. 解码我们想要保留的其他特殊字符
+                // 2. 解码我们想要保留的特殊字符
                 String partiallyDecoded = fullyEncoded
                         .replaceAll("\\+", "%20")     // 空格保持编码为%20
                         .replaceAll("%2B", "+")       // 解码+号
+                        .replaceAll("%2F", "/")       // 解码/号
                         .replaceAll("%23", "#")       // 解码#号
                         .replaceAll("%7E", "~")       // 解码~号
-                        // / 已经被替换,不需要处理
+                        // - 号不需要处理,URL编码不会编码-
                         ;
 
-                // 4. 设置响应头
+                // 3. 设置响应头
                 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
                 response.setHeader("Content-Disposition",
-                        "attachment; filename=\"" + partiallyDecoded + "\"; " +
-                                "filename*=UTF-8''" + partiallyDecoded);
+                        "attachment; filename=\"" + partiallyDecoded + "\"; ");
 
             } catch (Exception e) {
-                // 备用方案
+                // 备用方案:简单清理
                 String safeFileName = originalFileName
-                        .replaceAll("[\\\\/:*?\"<>|]", "_")
+                        .replaceAll("[\\\\:*?\"<>|]", "_")
                         .trim();
                 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
                 response.setHeader("Content-Disposition",