C#通过SFTP操作类 连接sftp
发布时间:2020-12-15 19:52:15 所属栏目:百科 来源:网络整理
导读:先上传[SFTP操作类] 1 public class SFTPHelper 2 { 3 private Tamir.SharpSsh.jsch.Session m_session; 4 private Channel m_channel; 5 private ChannelSftp m_sftp; 6 #region 字段或属性 7 #endregion 8 9 // host:sftp地址 user:用户名 pwd:密码 10 p
先上传[SFTP操作类] 1 public class SFTPHelper 2 { 3 private Tamir.SharpSsh.jsch.Session m_session; 4 private Channel m_channel; 5 private ChannelSftp m_sftp; 6 #region 字段或属性 7 #endregion 8 9 //host:sftp地址 user:用户名 pwd:密码 10 public SFTPHelper(string host,string user,string pwd) 11 { 12 string[] arr = host.Split(‘:‘); 13 string ip = arr[0]; 14 int port = 22; 15 if (arr.Length > 1) port = Int32.Parse(arr[1]); 16 17 JSch jsch = new JSch(); 18 m_session = jsch.getSession(user,ip,port); 19 20 MyUserInfo ui = new MyUserInfo(); 21 ui.setPassword(pwd); 22 m_session.setUserInfo(ui); 23 24 } 25 26 //SFTP连接状态 27 public bool Connected { get { return m_session.isConnected(); } } 28 29 //连接SFTP 30 public bool Connect() 31 { 32 try 33 { 34 if (!Connected) 35 { 36 m_session.connect(); 37 m_channel = m_session.openChannel("sftp"); 38 m_channel.connect(); 39 m_sftp = (ChannelSftp)m_channel; 40 } 41 return true; 42 } 43 catch 44 { 45 return false; 46 } 47 } 48 49 //断开SFTP 50 public void Disconnect() 51 { 52 if (Connected) 53 { 54 m_channel.disconnect(); 55 m_session.disconnect(); 56 } 57 } 58 59 //SFTP存放文件 60 public bool Put(string localPath,string remotePath) 61 { 62 try 63 { 64 Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(localPath); 65 Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(remotePath); 66 m_sftp.put(src,dst); 67 return true; 68 } 69 catch (Exception ex) 70 { 71 72 73 return false; 74 } 75 76 77 } 78 79 80 /// <summary> 81 /// //SFTP获取文件 82 /// </summary> 83 /// <param name="remotePath">服务器路径 </param> 84 /// <param name="localPath">下载到本机的地址</param> 85 /// <returns></returns> 86 public bool Get(string remotePath,string localPath) 87 { 88 try 89 { 90 string fullRemotePath = "/" + remotePath.TrimStart(‘/‘); 91 Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(fullRemotePath); 92 Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(localPath); 93 94 m_sftp.get(src,dst); 95 96 //Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(remotePath); 97 //Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(localPath); 98 99 //m_sftp.get(src,dst); 100 101 102 return true; 103 } 104 catch (Exception ex) 105 { 106 return false; 107 } 108 } 109 //删除SFTP文件 110 public bool Delete(string remoteFile) 111 { 112 try 113 { 114 m_sftp.rm(remoteFile); 115 return true; 116 } 117 catch 118 { 119 return false; 120 } 121 } 122 123 /// <summary> 124 /// 修改文件名称 125 /// </summary> 126 /// <param name="remotrPath"></param> 127 /// <param name="newPath"></param> 128 /// <returns></returns> 129 public bool ReName(string remotrPath,string newPath) 130 { 131 try 132 { 133 m_sftp.rename(remotrPath,newPath); 134 return true; 135 } 136 catch (Exception) 137 { 138 139 throw; 140 } 141 142 } 143 144 /// <summary> 145 /// 创建文件夹 146 /// </summary> 147 /// <param name="remotrPath"></param> 148 /// <returns></returns> 149 public bool Mkdir(string remotrPath) 150 { 151 try 152 { 153 m_sftp.mkdir(remotrPath); 154 return true; 155 } 156 catch (Exception) 157 { 158 159 return false; 160 } 161 } 162 163 164 165 166 /// <summary> 167 /// 判断文件sftp 是否存在 168 /// </summary> 169 /// <param name="path">文件目录</param> 170 /// <returns></returns> 171 public bool isExistDir(string path) 172 { 173 bool isDirExistFlag = false; 174 try 175 { 176 SftpATTRS sftpATTRS = m_sftp.lstat(path); //lstat()检索文件或目录的文件属性 177 isDirExistFlag = true; 178 179 return sftpATTRS.isDir(); //isDir()检查此文件是否为目录 180 } 181 catch (Exception e) 182 { 183 if (e.Message.ToLower().Equals("no such file")) 184 { 185 isDirExistFlag = false; 186 } 187 } 188 return isDirExistFlag; 189 190 } 191 192 public string createDir(string createpath) 193 { 194 string mes = ""; 195 try 196 { 197 if (isExistDir(createpath)) 198 { 199 200 } 201 else 202 { 203 string[] pathArry = createpath.Split(‘/‘); 204 foreach (var path in pathArry) 205 { 206 207 208 { 209 if (path.Equals("")) 210 { 211 continue; 212 } 213 214 if (isExistDir(path)) 215 { 216 m_sftp.cd(path); 217 if (isExistDir(createpath)) 218 { 219 220 } 221 } 222 else 223 { 224 // 建立目录 225 m_sftp.mkdir(path); 226 // 进入并设置为当前目录 227 m_sftp.cd(path); 228 } 229 } 230 } 231 } 232 } 233 catch (SftpException e) 234 { 235 mes = ("创建路径错误:" + createpath); 236 } 237 return mes; 238 } 239 240 241 242 243 244 245 //获取SFTP文件列表 246 public ArrayList GetFileList(string remotePath,string fileType) 247 { 248 try 249 { 250 Tamir.SharpSsh.java.util.Vector vvv = m_sftp.ls(remotePath); 251 ArrayList objList = new ArrayList(); 252 foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry qqq in vvv) 253 { 254 string sss = qqq.getFilename(); 255 string sq = sss.Substring(sss.Length - fileType.Length); 256 if (sss.Length > (fileType.Length + 1) && fileType == sss.Substring(sss.Length - fileType.Length)) 257 { 258 objList.Add(sss); 259 } 260 else 261 { 262 continue; 263 } 264 } 265 return objList; 266 } 267 catch 268 { 269 return null; 270 } 271 } 272 273 //获取SFTP文件列表 274 public ArrayList GetFileList(string remotePath) 275 { 276 string keyword; 277 try 278 { 279 //Tamir.SharpSsh.java.util.Vector vvv = sftp.ListDirectory(remotePath); 280 Tamir.SharpSsh.java.util.Vector vvv = m_sftp.ls(remotePath); 281 282 283 ArrayList objList = new ArrayList(); 284 foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry qqq in vvv) 285 { 286 string sss = qqq.getFilename().ToString(); 287 288 289 byte[] buffer = Encoding.GetEncoding("GB2312").GetBytes(sss); 290 keyword = Encoding.UTF8.GetString(buffer); 291 292 byte[] buffer1 = Encoding.UTF8.GetBytes(sss); 293 string keyword1 = Encoding.GetEncoding("GB2312").GetString(buffer); 294 295 296 Encoding d = Encoding.GetEncoding("GBK"); 297 298 299 300 Encoding.UTF8.GetString(d.GetBytes(sss)); 301 302 303 ////声明字符集 304 //System.Text.Encoding utf8,gb2312; 305 ////gb2312 306 //gb2312 = System.Text.Encoding.GetEncoding("gb2312"); 307 ////utf8 308 //utf8 = System.Text.Encoding.GetEncoding("utf-8"); 309 //byte[] gb; 310 //gb = gb2312.GetBytes(sss); 311 //gb = System.Text.Encoding.Convert(gb2312,utf8,gb); 312 313 314 315 316 //得到4种编码的string 317 if (sss.IndexOf(‘.‘) != -1) 318 { 319 objList.Add(keyword); 320 } 321 else 322 { 323 continue; 324 } 325 } 326 return objList; 327 } 328 catch (Exception ex) 329 { 330 return null; 331 } 332 } 333 334 335 //登录验证信息 336 public class MyUserInfo : UserInfo 337 { 338 String passwd; 339 public String getPassword() { return passwd; } 340 public void setPassword(String passwd) { this.passwd = passwd; } 341 342 public String getPassphrase() { return null; } 343 public bool promptPassphrase(String message) { return true; } 344 345 public bool promptPassword(String message) { return true; } 346 public bool promptYesNo(String message) { return true; } 347 public void showMessage(String message) { } 348 } 349 350 351 } 这个类有坑,这几个坑我都修复了,除了文件上传这里还有点bug? 基本好像都没问题 第一个坑? ?获取文件列表,只能获取某种文件后缀的文件,不能获取一个文件夹下面的所有文件 第二个坑 ,没有写创建文件夹这个方法 第三个坑, 下载文件中文名都乱码!!!(这tm是最坑的,目前还没有彻底解决这个问题) 比如说这个文件: 单1 乱码? 单_1 没问题, 现在确定的一个乱码错误就是 中文后面立刻马上来个数字就乱码!! ? 调用很简单: 1 SFTPHelper Ftp = new SFTPHelper(ftpHost,user,pwd); 2 bool b = Ftp.Connect(); 3 if (b) 4 { 5 ArrayList fileList = Ftp.GetFileList(folderName,fsinfo.Name.Split(‘.‘)[1]);//主要是检测服务器是否上传这个文件 6 RegisterLog("目前上传的文件是:" + fsinfo.FullName); 7 Ftp.Put(fsinfo.FullName,"" + folderName + ""); 8 } 9 Ftp.Disconnect(); ? 下载:? 0 SFTPHelper Ftp = new SFTPHelper(ftpHost,pwd); ?
这里百度到一个SFTP操作类
? 知道这个类了,就比较简单了,主要最麻烦的就是? 下载的时候中文乱码,不知道怎么解决,有大佬会的,麻烦留言一下! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |