From 5f467d39b6bcca41c0720493c1f6e68c77ea89e4 Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期日, 20 七月 2025 18:08:51 +0800
Subject: [PATCH] ftp服务器上传

---
 StandardInterface/MESApplication/Controllers/QC/LljController.cs |   95 ++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 73 insertions(+), 22 deletions(-)

diff --git a/StandardInterface/MESApplication/Controllers/QC/LljController.cs b/StandardInterface/MESApplication/Controllers/QC/LljController.cs
index fd428d0..f45a36d 100644
--- a/StandardInterface/MESApplication/Controllers/QC/LljController.cs
+++ b/StandardInterface/MESApplication/Controllers/QC/LljController.cs
@@ -348,36 +348,87 @@
         }
     }
 
-    [HttpGet("DownloadFtpFile")]
-    public IActionResult DownloadFtpFile([FromQuery] string itemNo, [FromQuery] string fileName)
+    [HttpGet("PreviewFtpFile")]
+    public IActionResult PreviewFtpFile([FromQuery] string itemNo, [FromQuery] string fileName, [FromQuery] string ftpServer)
     {
-        // FTP鏈嶅姟鍣ㄤ俊鎭�
-        string ftpServer = "ftp://36.26.21.214";
-        string ftpUser = "hm_ftp";
-        string ftpPwd = "dell_123"; 
-        string ftpPath = $"{ftpServer}/IQC/{itemNo}/{fileName}";
         try
         {
-            var request = (System.Net.FtpWebRequest)System.Net.WebRequest.Create(ftpPath);
-            request.Method = System.Net.WebRequestMethods.Ftp.DownloadFile;
-            request.Credentials = new System.Net.NetworkCredential(ftpUser, ftpPwd);
-            request.UseBinary = true;
-            request.UsePassive = false;
-            using (var response = (System.Net.FtpWebResponse)request.GetResponse())
-            using (var ftpStream = response.GetResponseStream())
-            using (var ms = new System.IO.MemoryStream())
+            // 娣诲姞CORS鍝嶅簲澶�
+            Response.Headers.Add("Access-Control-Allow-Origin", "*");
+            Response.Headers.Add("Access-Control-Allow-Methods", "GET, OPTIONS");
+            Response.Headers.Add("Access-Control-Allow-Headers", "Content-Type");
+            Response.Headers.Add("Access-Control-Expose-Headers", "Content-Type, Content-Length");
+            
+            var service = new LljService();
+            var fileBytes = service.GetFtpFile(itemNo, fileName, ftpServer);
+            
+            if (fileBytes == null || fileBytes.Length == 0)
             {
-                ftpStream.CopyTo(ms);
-                ms.Position = 0;
-                string contentType = "application/octet-stream";
-                // 闃插尽鎬у鐞嗭紝鍘婚櫎fileName涓殑鍥炶溅鎹㈣鍜岀┖鏍�
-                fileName = fileName?.Trim().Replace("\r", "").Replace("\n", "");
-                return File(ms.ToArray(), contentType, fileName);
+                return NotFound("鏂囦欢鍦‵TP鏈嶅姟鍣ㄤ笂涓嶅瓨鍦�");
             }
+            
+            var contentType = service.GetContentType(fileName);
+            fileName = fileName?.Trim().Replace("\r", "").Replace("\n", "");
+            
+            return File(fileBytes, contentType);
         }
         catch (Exception ex)
         {
-            return BadRequest($"FTP涓嬭浇澶辫触锛歿ex.Message}锛宖tpPath={ftpPath}锛宖ileName={fileName}");
+            return StatusCode(500, $"棰勮鏂囦欢澶辫触锛歿ex.Message}");
         }
     }
+
+    [HttpGet("DownloadFtpFile")]
+    public IActionResult DownloadFtpFile([FromQuery] string itemNo, [FromQuery] string fileName, [FromQuery] string ftpServer)
+    {
+        try
+        {
+            // 娣诲姞CORS鍝嶅簲澶� - 鍏抽敭閰嶇疆鐢ㄤ簬瑙e喅璺ㄥ煙闂
+            Response.Headers.Add("Access-Control-Allow-Origin", "*");
+            Response.Headers.Add("Access-Control-Allow-Methods", "GET, OPTIONS");
+            Response.Headers.Add("Access-Control-Allow-Headers", "Content-Type, Authorization");
+            Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition, Content-Length, Content-Type");
+            
+            var service = new LljService();
+            var fileBytes = service.GetFtpFile(itemNo, fileName, ftpServer);
+            
+            if (fileBytes == null || fileBytes.Length == 0)
+            {
+                return NotFound("鏂囦欢鍦‵TP鏈嶅姟鍣ㄤ笂涓嶅瓨鍦�");
+            }
+            
+            var contentType = service.GetContentType(fileName);
+            fileName = fileName?.Trim().Replace("\r", "").Replace("\n", "");
+            
+            // 璁剧疆姝g‘鐨凜ontent-Disposition鍝嶅簲澶翠互鏀寔鏂囦欢涓嬭浇
+            var result = File(fileBytes, "application/octet-stream", fileName);
+            
+            // 纭繚Content-Disposition澶存纭缃紝鏀寔涓枃鏂囦欢鍚�
+            if (!string.IsNullOrEmpty(fileName))
+            {
+                var encodedFileName = System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);
+                Response.Headers.Add("Content-Disposition", $"attachment; filename*=UTF-8''{encodedFileName}");
+            }
+            
+            return result;
+        }
+        catch (Exception ex)
+        {
+            return StatusCode(500, $"涓嬭浇鏂囦欢澶辫触锛歿ex.Message}");
+        }
+    }
+
+    [HttpOptions("PreviewFtpFile")]
+    [HttpOptions("DownloadFtpFile")]
+    public IActionResult HandleOptions()
+    {
+        // 澶勭悊CORS棰勬璇锋眰
+        Response.Headers.Add("Access-Control-Allow-Origin", "*");
+        Response.Headers.Add("Access-Control-Allow-Methods", "GET, OPTIONS");
+        Response.Headers.Add("Access-Control-Allow-Headers", "Content-Type, Authorization");
+        Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition, Content-Length, Content-Type");
+        Response.Headers.Add("Access-Control-Max-Age", "86400");
+        
+        return Ok();
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3