using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel; using System; using System.Net; using System.Collections; using WinSCP; using Kede; using System.Text; using System.IO; using Kede.Utils; namespace TestAgreement.utils { internal class SftpWinSCPUtils { // 上传 public static ResponseBody sftpUpload(string localFilePath,string remoteFilePath,string ServerUrl, string UserName, string Password,string PortNumber) { // 本地文件 //localFilePath = @"D:\X.nc"; ResponseBody responseBody = new ResponseBody(); if (!File.Exists(localFilePath)) { responseBody.code = 0; responseBody.msg = $"File '{localFilePath}' does not exist."; return responseBody; } //localFilePath =localFilePath.Replace(@"\\",@"\"); // 远程文件地址 //remoteFilePath = "/testNc/X.nc"; //remoteFilePath = remoteFilePath; responseBody.code = 1; // 设定 SFTP 连接选项 SessionOptions sessionOptions = new SessionOptions { Protocol = Protocol.Sftp, HostName = ServerUrl, // SFTP 服务器地址 UserName = UserName, // 用户名 Password = Password, // 密码 PortNumber = PortNumber.StringToInt(), }; // 使用 WinSCP 会话 using (Session session = new Session()) { // 连接到 SFTP 服务器 try { // 设置不用公私钥的一定要设置这句话 sessionOptions.GiveUpSecurityAndAcceptAnySshHostKey = true; // 不用公私钥的要这一句 sessionOptions.FtpSecure = FtpSecure.None; Console.WriteLine("scp ======================="); session.Open(sessionOptions); Console.WriteLine("scp end ======================="); // 执行上传 TransferOperationResult transferResult; transferResult = session.PutFiles(localFilePath, remoteFilePath, false); // 检查传输结果 transferResult.Check(); // 输出上传的文件名 foreach (TransferEventArgs transfer in transferResult.Transfers) { Console.WriteLine("Uploaded: " + transfer.FileName); } } catch (Exception e) { Console.WriteLine("Error: " + e.Message); responseBody.code = 0; responseBody.msg = e.Message; } finally { // 断开连接 session.Dispose(); } if(responseBody.code == 1) { SocketUtil.socket(ServerUrl, Path.GetFileName(localFilePath),responseBody); } return responseBody; } } /* 下载nc程序 */ public void SftpDownload() { Console.WriteLine("====================sftp文件下载========================="); // 远程文件路径 string localFilePath = @"C:\Users\Lenovo\Desktop\temp\testNcQ.nc"; // 本地文件路径 string remoteFilePath = "/testNc/testNcQ.nc"; // 设定 SFTP 连接选项 SessionOptions sessionOptions = new SessionOptions { Protocol = Protocol.Sftp, HostName = "192.168.11.39", // SFTP 服务器地址 UserName = "root", // 用户名l Password = "root", // 密码 PortNumber = 8081, }; // 使用 WinSCP 会话 using (Session session = new Session()) { try { // 连接到 SFTP 服务器 session.Open(sessionOptions); Console.WriteLine("Connected to SFTP server."); // 执行下载 TransferOperationResult transferResult = session.GetFiles(remoteFilePath, localFilePath, false); transferResult.Check(); // 检查传输结果 // 输出下载的文件名 foreach (TransferEventArgs transfer in transferResult.Transfers) { Console.WriteLine("Downloaded: " + transfer.FileName); } } catch (Exception e) { Console.WriteLine("Error: " + e.Message); } finally { // 断开连接 session.Dispose(); } } } /* 删除nc程序 */ public static ResponseBody SftpDelete(string remoteFilePath, string ServerUrl,string UserName,string Pasword,string PortNumber) { Console.WriteLine("====================sftp文件删除========================="); // 远程文件路径 //string remoteFilePath = "/testNc/testNcQ.nc"; ResponseBody responseBody = new ResponseBody(); responseBody.code = 1; // 设定 SFTP 连接选项 SessionOptions sessionOptions = new SessionOptions { Protocol = Protocol.Sftp, HostName = ServerUrl, // SFTP 服务器地址 UserName = UserName, // 用户名l Password = Pasword, // 密码 PortNumber = PortNumber.StringToInt(), }; sessionOptions.GiveUpSecurityAndAcceptAnySshHostKey = true; // 使用 WinSCP 会话 using (Session session = new Session()) { try { // 连接到 SFTP 服务器 session.Open(sessionOptions); Console.WriteLine("Connected to SFTP server."); // 执行下载 session.RemoveFile(remoteFilePath); } catch (Exception e) { Console.WriteLine("Error: " + e.Message); responseBody.code = 0; responseBody.msg = e.Message; } finally { // 断开连接 session.Dispose(); } } return responseBody; } } }