c# SftpHelper 安全文件传输 | 您所在的位置:网站首页 › sftpclientput › c# SftpHelper 安全文件传输 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Renci.SshNet; using System.IO; using System.Threading; using System.Net; /***************************** * 概要:Sftp操作 * 设计者:DuanXuWen * 设计时间:20180309 * 版本:0.1 * 修改者: * 修改时间: * ***************************/ namespace Common { public class SftpHelper { /// /// Sftp连接 /// public SftpClient SftpClient = null; /// /// Sftp密钥 /// public PrivateKeyFile PrivateKeyFile = null; /// /// 无参构造 /// public SftpHelper() { } /// /// 有参构造 /// /// sftp服务器名或IP /// 端口,默认22 /// 用户名 /// 用户私钥 /// 密码:(如不需密码,可不传) public SftpHelper(string sftpIP, string sftpName, Stream keyStream, string sftpPwd, int? sftpPort) { try { if (string.IsNullOrEmpty(sftpPwd)) { //使用秘钥验证 PrivateKeyFile = new PrivateKeyFile(keyStream); } else { //使用带口令的秘钥验证 PrivateKeyFile = new PrivateKeyFile(keyStream, sftpPwd); } if (sftpPort.HasValue) { //设置端口 SftpClient = new SftpClient(sftpIP, sftpPort.Value, sftpName, PrivateKeyFile); } else { //默认端口 SftpClient = new SftpClient(sftpIP, sftpName, PrivateKeyFile); } if (SftpClient != null) { //设置重试尝试之间的延迟(秒)。 SftpClient.ConnectionInfo.RetryAttempts = 5; //生存时间 SftpClient.ConnectionInfo.Timeout = new TimeSpan(0, 3, 0); } } catch (Exception ex) { string msg = "Sftp初始化相关错误!详情:Sftp服务器IP" + sftpIP + "用户名" + sftpName; string logAddress = System.Windows.Forms.Application.StartupPath + "\\Log\\ErrorMsg\\" + DateTime.Now.ToString("yyyyMMdd") + ".log"; LogHelper.WriteLog(ex, logAddress, true, msg); } } /// /// SFTP连接 /// /// public bool SftpConnect() { try { //是否可连接 if (SftpClient != null) { //判断当前是否已连接 if (!SftpClient.IsConnected) { SftpClient.Connect(); } //返回当前连接状态 return SftpClient.IsConnected; } return false; } catch (Exception ex) { string msg = "Sftp连接相关错误!"; string logAddress = System.Windows.Forms.Application.StartupPath + "\\Log\\ErrorMsg\\" + DateTime.Now.ToString("yyyyMMdd") + ".log"; LogHelper.WriteLog(ex, logAddress, true, msg); return false; } } /// /// SFTP关闭 /// public void DisConnect() { try { if (SftpClient != null) { if (SftpClient.IsConnected) { SftpClient.Disconnect(); SftpClient.Dispose(); SftpClient = null; } } } catch (Exception ex) { string msg = "Sftp关闭时相关错误!"; string logAddress = System.Windows.Forms.Application.StartupPath + "\\Log\\ErrorMsg\\" + DateTime.Now.ToString("yyyyMMdd") + ".log"; LogHelper.WriteLog(ex, logAddress, true, msg); } } /// /// 获取文件列表 /// /// 路径获取所有文件 /// 路径获取某个文件 /// public List GetFileList(string path, string catalogue) { try { //存放列表 List filesList = new List(); if (SftpClient != null) { if (!SftpClient.IsConnected) { SftpClient.Connect(); } //sftp.ChangeDirectory(catalogue); SftpClient.ListDirectory(path).ToList().ForEach(f => { filesList.Add(f.FullName); }); return filesList; } return null; } catch (Exception ex) { string msg = "Sftp获取文件相关错误!"; string logAddress = System.Windows.Forms.Application.StartupPath + "\\Log\\ErrorMsg\\" + DateTime.Now.ToString("yyyyMMdd") + ".log"; LogHelper.WriteLog(ex, logAddress, true, msg); return null; } } /// /// 下载文件 /// /// 包含全路径的服务器端文件名 /// 本地保存的文件名 /// 下载文件存放的路径 /// public bool Get(string remoteFileName, string localFileName, string catalogue) { try { if (SftpClient != null) { if (!SftpClient.IsConnected) { SftpClient.Connect(); } SftpClient.ChangeDirectory(catalogue); FileStream fs = File.OpenWrite(localFileName); SftpClient.DownloadFile(remoteFileName, fs); fs.Close(); return true; } return false; } catch (Exception ex) { string msg = "Sftp下载文件相关错误!详情:下载地址:" + remoteFileName + "存放地址:" + catalogue + "文件名称:" + localFileName; string logAddress = System.Windows.Forms.Application.StartupPath + "\\Log\\ErrorMsg\\" + DateTime.Now.ToString("yyyyMMdd") + ".log"; LogHelper.WriteLog(ex, logAddress, true, msg); return false; } } /// /// 上传文件 /// /// 待上传的文件路径 /// 待上传的文件流 /// 服务器端文件名 /// 上传文件存放的路径 /// public bool Put(Stream stream, string remoteFileName, string catalogue) { try { if (SftpClient != null) { if (!SftpClient.IsConnected) { SftpClient.Connect(); } //指定当前工作目录 SftpClient.ChangeDirectory(catalogue); SftpClient.UploadFile(stream, remoteFileName, true);//true 同名文件将被覆盖 stream.Close(); return true; } return false; } catch (Exception ex) { string msg = "Sftp上传文件相关错误!详情:上传地址:" + catalogue + "文件名称:" + remoteFileName; string logAddress = System.Windows.Forms.Application.StartupPath + "\\Log\\ErrorMsg\\" + DateTime.Now.ToString("yyyyMMdd") + ".log"; LogHelper.WriteLog(ex, logAddress, true, msg); return false; } } /// /// 上传文件 /// /// 待上传的文件路径 /// 待上传的文件流 /// 服务器端文件名 /// 上传文件存放的路径 /// public bool Put(string localFileName, string remoteFileName, string catalogue) { try { if (SftpClient != null) { if (!SftpClient.IsConnected) { SftpClient.Connect(); } //指定上传路径 SftpClient.ChangeDirectory(catalogue); FileStream fs = File.OpenRead(localFileName);//通过本地路径进行读取流 SftpClient.UploadFile(fs, remoteFileName, true);//true 同名文件将被覆盖 fs.Close(); return true; } return false; } catch (Exception ex) { string msg = "Sftp上传文件相关错误!详情:本地文件地址:" + localFileName + "上传地址:" + catalogue + "文件名称:" + remoteFileName; string logAddress = System.Windows.Forms.Application.StartupPath + "\\Log\\ErrorMsg\\" + DateTime.Now.ToString("yyyyMMdd") + ".log"; LogHelper.WriteLog(ex, logAddress, true, msg); return false; } } /// /// 创建文件夹 /// /// 文件夹名 /// 文件夹路径 /// public bool DirectoryExist(string sftpPath, string catalogue) { try { if (SftpClient != null) { if (!SftpClient.IsConnected) { SftpClient.Connect(); } //获取路径下文件夹 var list = SftpClient.ListDirectory(catalogue); //判断是否存在文件夹 if (list.Where(x => x.IsDirectory && x.Name == sftpPath).Count() == 0) { //创建文件夹 SftpClient.CreateDirectory(sftpPath); return true; } } return false; } catch (Exception ex) { string msg = "Sftp创建文件夹相关错误!详情:创建地址:" + catalogue + "文件夹名称:" + sftpPath; string logAddress = System.Windows.Forms.Application.StartupPath + "\\Log\\ErrorMsg\\" + DateTime.Now.ToString("yyyyMMdd") + ".log"; LogHelper.WriteLog(ex, logAddress, true, msg); return false; } } /// /// 文件改名 /// /// 包含全路径的源文件名 /// 包含全路径的新文件名 /// 文件路径 /// public bool Rename(string orgFileName, string newFileName, string catalogue) { try { if (SftpClient != null) { if (!SftpClient.IsConnected) { SftpClient.Connect(); } SftpClient.RenameFile(orgFileName, newFileName); return true; } return false; } catch (Exception ex) { string msg = "Sftp文件改名相关错误!详情:原文件路径:" + orgFileName + "新文件路径:" + newFileName; string logAddress = System.Windows.Forms.Application.StartupPath + "\\Log\\ErrorMsg\\" + DateTime.Now.ToString("yyyyMMdd") + ".log"; LogHelper.WriteLog(ex, logAddress, true, msg); return false; } } /// /// 删除文件 /// /// 文件名 /// 文件路径 /// public bool Delete(string fileName, string catalogue) { try { if (SftpClient != null) { if (!SftpClient.IsConnected) { SftpClient.Connect(); } SftpClient.ChangeDirectory(catalogue); SftpClient.DeleteFile(fileName); return true; } return false; } catch (Exception ex) { string msg = "Sftp删除文件相关错误!详情:文件名:" + fileName + "文件路径:" + catalogue; string logAddress = System.Windows.Forms.Application.StartupPath + "\\Log\\ErrorMsg\\" + DateTime.Now.ToString("yyyyMMdd") + ".log"; LogHelper.WriteLog(ex, logAddress, true, msg); return false; } } } }
|
CopyRight 2018-2019 实验室设备网 版权所有 |