前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >windows sftp服务[web服务器在哪打开]

windows sftp服务[web服务器在哪打开]

作者头像
Java架构师必看
发布2022-02-19 10:39:28
10.6K0
发布2022-02-19 10:39:28
举报
文章被收录于专栏:Java架构师必看Java架构师必看

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说windows sftp服务[web服务器在哪打开],希望能够帮助大家进步!!!

因为项目的需要,整理了一段C#操作sftp的方法。

依赖的第三方类库名称为:SharpSSH 1.1.1.13.

代码如下:

代码语言:javascript
复制
   1:  using System;
代码语言:javascript
复制
   2:  using System.Collections.Generic;
代码语言:javascript
复制
   3:  using System.Linq;
代码语言:javascript
复制
   4:  using System.Text;
代码语言:javascript
复制
   5:  using System.Collections.Specialized;
代码语言:javascript
复制
   6:  using System.Configuration;
代码语言:javascript
复制
   7:  using Tamir.SharpSsh;
代码语言:javascript
复制
   8:  using System.IO;
代码语言:javascript
复制
   9:  using Tamir.SharpSsh.jsch;
代码语言:javascript
复制
  10:   
代码语言:javascript
复制
  11:  namespace CET.Finance.SftpWinService.Common
代码语言:javascript
复制
  12:  {
代码语言:javascript
复制
  13:      /// <summary>
代码语言:javascript
复制
  14:      /// 访问Sftp服务器方法(凭证请在config文件中配置)
代码语言:javascript
复制
  15:      /// </summary>
代码语言:javascript
复制
  16:      public class SftpClient : IDisposable
代码语言:javascript
复制
  17:      {
代码语言:javascript
复制
  18:          #region Properties
代码语言:javascript
复制
  19:   
代码语言:javascript
复制
  20:          /// <summary>
代码语言:javascript
复制
  21:          /// 主机名或IP
代码语言:javascript
复制
  22:          /// </summary>
代码语言:javascript
复制
  23:          public string HostName { get; private set; }
代码语言:javascript
复制
  24:          /// <summary>
代码语言:javascript
复制
  25:          /// 用户名
代码语言:javascript
复制
  26:          /// </summary>
代码语言:javascript
复制
  27:          public string UserName { get; private set; }
代码语言:javascript
复制
  28:          /// <summary>
代码语言:javascript
复制
  29:          /// 密码
代码语言:javascript
复制
  30:          /// </summary>
代码语言:javascript
复制
  31:          public string Password { get; private set; }
代码语言:javascript
复制
  32:   
代码语言:javascript
复制
  33:          /// <summary>
代码语言:javascript
复制
  34:          /// 端口号(默认端口为22)
代码语言:javascript
复制
  35:          /// </summary>
代码语言:javascript
复制
  36:          public int Port { get; private set; }        
代码语言:javascript
复制
  37:   
代码语言:javascript
复制
  38:          #endregion
代码语言:javascript
复制
  39:   
代码语言:javascript
复制
  40:          private static readonly string defRemotePath = "/";//默认操作是都是从根目录开始。
代码语言:javascript
复制
  41:          private ChannelSftp m_sftp;
代码语言:javascript
复制
  42:          private Session m_session;
代码语言:javascript
复制
  43:          Channel m_channel;
代码语言:javascript
复制
  44:   
代码语言:javascript
复制
  45:          /// <summary>
代码语言:javascript
复制
  46:          /// 从配置文件中加载凭证信息
代码语言:javascript
复制
  47:          /// </summary>       
代码语言:javascript
复制
  48:          public SftpClient()
代码语言:javascript
复制
  49:          {
代码语言:javascript
复制
  50:              var config = ConfigurationManager.GetSection("SftpServer") as NameValueCollection;
代码语言:javascript
复制
  51:              this.HostName = config["host_name"];
代码语言:javascript
复制
  52:              this.UserName = config["user_name"];
代码语言:javascript
复制
  53:              this.Password = config["password"];
代码语言:javascript
复制
  54:              this.Port = Convert.ToInt32(config["port"] ?? "22");//默认端口为22    
代码语言:javascript
复制
  55:              this.ConnectSftp();
代码语言:javascript
复制
  56:          }
代码语言:javascript
复制
  57:   
代码语言:javascript
复制
  58:          #region Events
代码语言:javascript
复制
  59:   
代码语言:javascript
复制
  60:          /// <summary>
代码语言:javascript
复制
  61:          /// SFTP获取文件   
代码语言:javascript
复制
  62:          /// </summary>
代码语言:javascript
复制
  63:          /// <param name="remotePath"></param>
代码语言:javascript
复制
  64:          /// <param name="localPath"></param>
代码语言:javascript
复制
  65:          /// <returns></returns>
代码语言:javascript
复制
  66:   
代码语言:javascript
复制
  67:          public bool Get(string remotePath, string localPath)
代码语言:javascript
复制
  68:          {
代码语言:javascript
复制
  69:              try
代码语言:javascript
复制
  70:              {
代码语言:javascript
复制
  71:                  string fullRemotePath = defRemotePath + remotePath.TrimStart('/');
代码语言:javascript
复制
  72:                  Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(fullRemotePath);
代码语言:javascript
复制
  73:                  Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(localPath);
代码语言:javascript
复制
  74:                  m_sftp.get(src, dst);
代码语言:javascript
复制
  75:                  return true;
代码语言:javascript
复制
  76:              }
代码语言:javascript
复制
  77:              catch
代码语言:javascript
复制
  78:              {
代码语言:javascript
复制
  79:                  return false;
代码语言:javascript
复制
  80:              }
代码语言:javascript
复制
  81:          }
代码语言:javascript
复制
  82:   
代码语言:javascript
复制
  83:          /// <summary>
代码语言:javascript
复制
  84:          ///SFTP存放文件   
代码语言:javascript
复制
  85:          /// </summary>
代码语言:javascript
复制
  86:          /// <param name="localPath"></param>
代码语言:javascript
复制
  87:          /// <param name="remotePath"></param>
代码语言:javascript
复制
  88:          /// <returns></returns>
代码语言:javascript
复制
  89:          public void Put(string localPath, string remotePath)
代码语言:javascript
复制
  90:          {
代码语言:javascript
复制
  91:              Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(localPath);
代码语言:javascript
复制
  92:              string fullRemotePath = defRemotePath + remotePath.TrimStart('/');
代码语言:javascript
复制
  93:              Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(fullRemotePath);
代码语言:javascript
复制
  94:              m_sftp.put(src, dst);
代码语言:javascript
复制
  95:          }
代码语言:javascript
复制
  96:   
代码语言:javascript
复制
  97:   
代码语言:javascript
复制
  98:          /// <summary>
代码语言:javascript
复制
  99:          /// 删除SFTP文件 
代码语言:javascript
复制
 100:          /// </summary>
代码语言:javascript
复制
 101:          /// <param name="remoteFile"></param>
代码语言:javascript
复制
 102:          /// <returns></returns>
代码语言:javascript
复制
 103:   
代码语言:javascript
复制
 104:          public void Delete(string remoteFile)
代码语言:javascript
复制
 105:          {
代码语言:javascript
复制
 106:              string fullRemotePath = defRemotePath + remoteFile.TrimStart('/');
代码语言:javascript
复制
 107:              m_sftp.rm(fullRemotePath);
代码语言:javascript
复制
 108:          }
代码语言:javascript
复制
 109:          /// <summary>
代码语言:javascript
复制
 110:          /// 获取SFTP文件列表   
代码语言:javascript
复制
 111:          /// </summary>
代码语言:javascript
复制
 112:          /// <param name="remotePath"></param>
代码语言:javascript
复制
 113:          /// <param name="fileType">文件后缀名称(.txt)</param>
代码语言:javascript
复制
 114:          /// <returns></returns>
代码语言:javascript
复制
 115:          public List<string> GetFileList(string remotePath, string fileType)
代码语言:javascript
复制
 116:          {
代码语言:javascript
复制
 117:              List<string> objList = new List<string>();
代码语言:javascript
复制
 118:              string fullRemotePath = defRemotePath + remotePath.TrimStart('/');
代码语言:javascript
复制
 119:              if (DirExist(fullRemotePath))
代码语言:javascript
复制
 120:              {
代码语言:javascript
复制
 121:                  Tamir.SharpSsh.java.util.Vector vvv = m_sftp.ls(fullRemotePath);
代码语言:javascript
复制
 122:                  foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry qqq in vvv)
代码语言:javascript
复制
 123:                  {
代码语言:javascript
复制
 124:                      string sss = qqq.getFilename();
代码语言:javascript
复制
 125:                      if (fileType.Contains(Path.GetExtension(sss)))
代码语言:javascript
复制
 126:                      { 
代码语言:javascript
复制
 127:                          objList.Add(sss);
代码语言:javascript
复制
 128:                      }                  
代码语言:javascript
复制
 129:                  }
代码语言:javascript
复制
 130:              }
代码语言:javascript
复制
 131:              return objList;
代码语言:javascript
复制
 132:          }
代码语言:javascript
复制
 133:   
代码语言:javascript
复制
 134:          /// <summary>
代码语言:javascript
复制
 135:          /// 目录是否存在
代码语言:javascript
复制
 136:          /// </summary>
代码语言:javascript
复制
 137:          /// <param name="dirName">目录名称必须从根开始</param>
代码语言:javascript
复制
 138:          /// <returns></returns>
代码语言:javascript
复制
 139:          public bool DirExist(string dirName)
代码语言:javascript
复制
 140:          {
代码语言:javascript
复制
 141:              try
代码语言:javascript
复制
 142:              {
代码语言:javascript
复制
 143:                  m_sftp.ls(defRemotePath + dirName.TrimStart('/'));
代码语言:javascript
复制
 144:                  return true;
代码语言:javascript
复制
 145:              }
代码语言:javascript
复制
 146:              catch (Tamir.SharpSsh.jsch.SftpException)
代码语言:javascript
复制
 147:              {
代码语言:javascript
复制
 148:                  return false;//执行ls命令时出错,则目录不存在。
代码语言:javascript
复制
 149:              }
代码语言:javascript
复制
 150:          }
代码语言:javascript
复制
 151:   
代码语言:javascript
复制
 152:          /// <summary>
代码语言:javascript
复制
 153:          /// 创建目录
代码语言:javascript
复制
 154:          /// </summary>
代码语言:javascript
复制
 155:          /// <param name="dirName">目录名称必须从根开始</param>
代码语言:javascript
复制
 156:          /// <returns></returns>
代码语言:javascript
复制
 157:          public void Mkdir(string dirName)
代码语言:javascript
复制
 158:          {
代码语言:javascript
复制
 159:              Tamir.SharpSsh.java.util.Vector vvv = m_sftp.ls(defRemotePath);
代码语言:javascript
复制
 160:              foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry fileName in vvv)
代码语言:javascript
复制
 161:              {
代码语言:javascript
复制
 162:                  string name = fileName.getFilename();
代码语言:javascript
复制
 163:                  if (name == dirName)
代码语言:javascript
复制
 164:                  {
代码语言:javascript
复制
 165:                      throw new Exception("dir is exist");
代码语言:javascript
复制
 166:                  }
代码语言:javascript
复制
 167:              }
代码语言:javascript
复制
 168:              m_sftp.mkdir(defRemotePath + dirName.TrimStart('/'));
代码语言:javascript
复制
 169:          }
代码语言:javascript
复制
 170:   
代码语言:javascript
复制
 171:          /// <summary>
代码语言:javascript
复制
 172:          /// 连接SFTP   
代码语言:javascript
复制
 173:          /// </summary>
代码语言:javascript
复制
 174:          public void ConnectSftp()
代码语言:javascript
复制
 175:          {
代码语言:javascript
复制
 176:              JSch jsch = new JSch();   //利用java实现的通讯包  
代码语言:javascript
复制
 177:              m_session = jsch.getSession(this.UserName, this.HostName, this.Port);
代码语言:javascript
复制
 178:              m_session.setHost(this.HostName);
代码语言:javascript
复制
 179:              MyUserInfo ui = new MyUserInfo();
代码语言:javascript
复制
 180:              ui.setPassword(this.Password);
代码语言:javascript
复制
 181:              m_session.setUserInfo(ui);
代码语言:javascript
复制
 182:   
代码语言:javascript
复制
 183:              if (!m_session.isConnected())
代码语言:javascript
复制
 184:              {
代码语言:javascript
复制
 185:                  m_session.connect();
代码语言:javascript
复制
 186:                  m_channel = m_session.openChannel("sftp");
代码语言:javascript
复制
 187:                  m_channel.connect();
代码语言:javascript
复制
 188:                  m_sftp = (ChannelSftp)m_channel;
代码语言:javascript
复制
 189:              }
代码语言:javascript
复制
 190:          }
代码语言:javascript
复制
 191:   
代码语言:javascript
复制
 192:          /// <summary>
代码语言:javascript
复制
 193:          /// 断开SFTP    
代码语言:javascript
复制
 194:          /// </summary>
代码语言:javascript
复制
 195:          public void DisconnectSftp()
代码语言:javascript
复制
 196:          {
代码语言:javascript
复制
 197:              if (m_session.isConnected())
代码语言:javascript
复制
 198:              {
代码语言:javascript
复制
 199:                  m_channel.disconnect();
代码语言:javascript
复制
 200:                  m_session.disconnect();
代码语言:javascript
复制
 201:              }
代码语言:javascript
复制
 202:          }
代码语言:javascript
复制
 203:   
代码语言:javascript
复制
 204:          #endregion
代码语言:javascript
复制
 205:   
代码语言:javascript
复制
 206:          //登录验证信息            
代码语言:javascript
复制
 207:          private class MyUserInfo : UserInfo
代码语言:javascript
复制
 208:          {
代码语言:javascript
复制
 209:              String passwd;
代码语言:javascript
复制
 210:              public String getPassword() { return passwd; }
代码语言:javascript
复制
 211:              public void setPassword(String passwd) { this.passwd = passwd; }
代码语言:javascript
复制
 212:   
代码语言:javascript
复制
 213:              public String getPassphrase() { return null; }
代码语言:javascript
复制
 214:              public bool promptPassphrase(String message) { return true; }
代码语言:javascript
复制
 215:   
代码语言:javascript
复制
 216:              public bool promptPassword(String message) { return true; }
代码语言:javascript
复制
 217:              public bool promptYesNo(String message) { return true; }
代码语言:javascript
复制
 218:              public void showMessage(String message) { }
代码语言:javascript
复制
 219:          }
代码语言:javascript
复制
 220:   
代码语言:javascript
复制
 221:          public void Dispose()
代码语言:javascript
复制
 222:          {
代码语言:javascript
复制
 223:              this.DisconnectSftp();
代码语言:javascript
复制
 224:              this.m_channel = null;
代码语言:javascript
复制
 225:              this.m_session = null;
代码语言:javascript
复制
 226:              this.m_sftp = null;
代码语言:javascript
复制
 227:          }
代码语言:javascript
复制
 228:      }
代码语言:javascript
复制
 229:   
代码语言:javascript
复制
 230:  }

配置文件内容:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
代码语言:javascript
复制
<configuration>
代码语言:javascript
复制
  <configSections>
代码语言:javascript
复制
    <section name="SftpServer" type="System.Configuration.NameValueSectionHandler"/>
代码语言:javascript
复制
  </configSections>
代码语言:javascript
复制
  <SftpServer>
代码语言:javascript
复制
    <add key="host_name" value="127.0.0.1"/>
代码语言:javascript
复制
    <add key="user_name" value="test"/>
代码语言:javascript
复制
    <add key="password" value="123"/>
代码语言:javascript
复制
  </SftpServer>   
代码语言:javascript
复制
</configuration>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-182,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档