• 关于FTP和SFTP的操作总结


    SFTP使用的三方类库是Renci.SshNet.DLL

    SFTP连接大部分网上使用IP地址形式的路径,而我本次使用的是网站形式的。类似sftp.XXX.com

    SFTP的操作也类似File文件的操作,网上大部分都是写一个Helper类,创建对象,调用方法,但是直接操作也是直接了当的,本次操作总结就直接写方法,不写Helper类。

    1.连接SFTP

    根据网上很多的操作 使用Host即IP地址,Port端口号,账号密码即可成功。

     而我本次在实践中,用此方法,一直提示无法找到这样的主机。

    最终使用它的另一个重载方法

    只提供host,账号密码便可以成功连接。

    代码如下:

    <add key="sFTPPath" value="sftp.XXX.com" />
    <add key="sFTPUserName" value="XXXXXX" />
     <add key="sFTPPwd" value="XXXXXXXX" />
    App.config
    SftpClient client = new SftpClient(ConfigurationManager.AppSettings["sFTPPath"], ConfigurationManager.AppSettings["sFTPUserName"], ConfigurationManager.AppSettings["sFTPPwd"]);//使用Clinet方法中的HOST NAME PASSWORD方法
     client.Connect();//连接Client
    bool connected = client.IsConnected;//判断是否连接成功
    Sftp连接创建

     2.连接SFTP中的操作

    2.1 SFTP 上传文件,使用UpoladFile方法,对象都是我们一开始创建的Clinet

    代码如下:

     <add key="sFTPFolder" value="//XXXXX"/>
    APP.config
     FileStream fs = File.OpenRead(本地文件);//把文件写成流
                                    string uploadName = ConfigurationManager.AppSettings["sFTPFolder"] + @"/" + name+ ".jgp";//上传的文件地址使用的是相对路径文件 如//XXX/651.JPG
                                    client.UploadFile(fs, uploadName);//上传文件
                                    fs.Close();//关闭流 停止占用文件进程
    UploadFile

    2.2 SFTP 下载操作 使用DownloadFile方法

     

     代码如下:

     <add key="sFTPFolder" value="//XXXXXXX"/>
    App.config
    string localpath = Path + @"" + name + ".jgp";//localpath是个完整的路径包含文件名
    FileStream fs = File.OpenWrite(localpath);  
    //把文件写成流             
    client.DownloadFile(ConfigurationManager.AppSettings["sFTPFolder"] + @"/" + name + ".jpg", fs);//SFTP上的文件也是相对路径加文件名
    fs.Close();
    DownloadFile

    2.3 类似还有获取SFTP文件列表名(返回List),还有SFTP内移动文件等等 可以自己查看操作。

       path如 //XXXX/

     

     PS:操作本地文件时地址都是精确到文件名格式 如:‪F:\XXX\XXXXXX.jpg

             操作SFTP上的路径都是相对地址   如://XXXX/XXXX.jpg

             操作文件都是精确到文件名的地址

     FTP 则提供一个上传方法

     public static void FtpSendFile(string filepath, string path, string ftpip, string username, string password)
            {
    
                try
                {
                    FileInfo fileInf = new FileInfo(filepath);
                    string uri = path + fileInf.Name;
                    FtpWebRequest reqFTP;
                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    reqFTP.KeepAlive = false;
                    reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
                    reqFTP.UseBinary = true;
                    reqFTP.ContentLength = fileInf.Length;
                    reqFTP.Proxy = new WebProxy();
                    int buffLength = 2048;
                    byte[] buff = new byte[buffLength];
                    int contentLen;
                    FileStream fs = fileInf.OpenRead();
                    Stream strm = reqFTP.GetRequestStream();
                    contentLen = fs.Read(buff, 0, buffLength);
                    while (contentLen != 0)
                    {
                        strm.Write(buff, 0, contentLen);
                        contentLen = fs.Read(buff, 0, buffLength);
                    }
                    strm.Close();
                    fs.Close();
                }
                catch (Exception ex)
                {
                    //LogHelper.WriteLog(ex.Message.ToString(), ex);
                }
    
            }
    FtpSendFile

    filepath具体文件名地址,path:ftp://XX.XX.XX.XX//XXXXX//  (上传到XXXX文件夹下)  ip:XXX.XXX.XX.XXX 后面两个参数是账号密码

  • 相关阅读:
    Windows命令行乱码问题解决
    Mysql中in语句排序
    MyBatis批量修改操作
    MyBatis联合查询association使用
    【转】Nginx 安装配置
    【转】解决编译安装NGINX时make报错
    【转】ora-00031:session marked for kill处理oracle中杀不掉的锁
    IOC-AOP
    【转】 linux之sed用法
    【转】Nginx+Tomcat+Memcached集群Session共享
  • 原文地址:https://www.cnblogs.com/cdjbolg/p/11834653.html
Copyright © 2020-2023  润新知