c# SftpHelper 安全文件传输 您所在的位置:网站首页 sftpclientput c# SftpHelper 安全文件传输

c# SftpHelper 安全文件传输

#c# SftpHelper 安全文件传输| 来源: 网络整理| 查看: 265

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 实验室设备网 版权所有