From dcca57fb9b6f267a03b32770c459358a22a9afa8 Mon Sep 17 00:00:00 2001 From: quowingwang Date: Tue, 11 Nov 2025 14:43:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=A8=A1=E6=9D=BF=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Infrastructure/Controllers/BaseController.cs | 12 +++++++++++- .../Mes/Process/ProcessInfoController.cs | 12 ++++++++++++ .../ImportTemplate/工艺路线导入模板.xlsx | Bin 0 -> 10082 bytes 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 RIZO.Admin.WebApi/wwwroot/ImportTemplate/工艺路线导入模板.xlsx diff --git a/Infrastructure/Controllers/BaseController.cs b/Infrastructure/Controllers/BaseController.cs index d840c9a..b6fe421 100644 --- a/Infrastructure/Controllers/BaseController.cs +++ b/Infrastructure/Controllers/BaseController.cs @@ -9,6 +9,7 @@ using Newtonsoft.Json.Serialization; using System; using System.Collections.Generic; using System.IO; +using System.Text; using System.Threading.Tasks; using System.Web; @@ -72,9 +73,18 @@ namespace Infrastructure.Controllers throw new CustomException(fileName + "文件不存在"); } var stream = System.IO.File.OpenRead(path); //创建文件流 + //Response.Headers.Append("Access-Control-Expose-Headers", "Content-Disposition"); + //return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", HttpUtility.UrlEncode(fileName)); + // 1. 对中文文件名进行 UTF-8 编码(处理空格为 %20) + string encodedFileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8).Replace("+", "%20"); + + // 2. 设置标准响应头(关键:告知浏览器文件名使用 UTF-8 编码) Response.Headers.Append("Access-Control-Expose-Headers", "Content-Disposition"); - return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", HttpUtility.UrlEncode(fileName)); + Response.Headers["Content-Disposition"] = $"attachment; filename*=UTF-8''{encodedFileName}"; + + // 3. 返回文件流(不使用 File 方法的第三个参数,避免重复编码) + return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); } /// diff --git a/RIZO.Admin.WebApi/Controllers/Mes/Process/ProcessInfoController.cs b/RIZO.Admin.WebApi/Controllers/Mes/Process/ProcessInfoController.cs index d5f02c2..d8c411f 100644 --- a/RIZO.Admin.WebApi/Controllers/Mes/Process/ProcessInfoController.cs +++ b/RIZO.Admin.WebApi/Controllers/Mes/Process/ProcessInfoController.cs @@ -182,6 +182,18 @@ namespace RIZO.Admin.WebApi.Controllers.Mes.Process ); } + /// + /// 工艺信息导入模板下载 + /// + /// + [HttpGet("importTemplate")] + [Log(Title = "工艺路线导入模板", BusinessType = BusinessType.EXPORT, IsSaveRequestData = true, IsSaveResponseData = false)] + [AllowAnonymous] + public IActionResult ImportTemplateExcel() + { + (string, string) result = DownloadImportTemplate("工艺路线导入模板"); + return ExportExcel(result.Item2, result.Item1); + } } } \ No newline at end of file diff --git a/RIZO.Admin.WebApi/wwwroot/ImportTemplate/工艺路线导入模板.xlsx b/RIZO.Admin.WebApi/wwwroot/ImportTemplate/工艺路线导入模板.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6027124e044f3b3ad932339217d0a5d368a7ce1b GIT binary patch literal 10082 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 QpaGAGc;K8HNS{alAA!L{qW}N^ literal 0 HcmV?d00001