• 基于WinSCP实现SFTP/FTP文件的上传下载


    介绍

    WinSCP .NET 程序集是Nuget上的安装包,它允许代码连接到远程计算机,并在 SFTP、FTP、WebDAV、S3 和 SCP 会话上操作远程文件

    官网信息

    地址

    https://winscp.net/eng/index.php

    .Net示例代码

    https://winscp.net/eng/docs/library_examples

    SFTP操作文件

    上传 PutFiles
    public static int WinScpUpload()
    {
        try
        {
            // Setup session options
            SessionOptions sessionOptions = new SessionOptions
            {
                Protocol = Protocol.Sftp,
                HostName = "192.168.xx.xxx",
                PortNumber = 22,// SFTP默认端口22
                UserName = "用户名",
                Password = "密码",
                SshHostKeyFingerprint = "ssh-ed25519 255 ***"// 不知道时可以在下面根据用户名和密码生成,是必须的
            };
    
            using (Session session = new Session())
            {
                // 可以使用该语句生成SshHostKeyFingerprint
                //var fingerprint = session.ScanFingerprint(sessionOptions, "SHA-256");
    
                // Connect
                session.Open(sessionOptions);
    
                // Upload files
                TransferOptions transferOptions = new TransferOptions();
                transferOptions.TransferMode = TransferMode.Binary;
    
                // PutFiles参数解释:localPath,remotePath,remove,TransferOptions
                // remove:bool,成功后是否删除本地文件,默认false
                var transferResult = session.PutFiles(@"d:	est*", "/home/test/", true, transferOptions);
    
                // Throw on any error
                transferResult.Check();
    
                // Print results
                foreach (TransferEventArgs transfer in transferResult.Transfers)
                {
                    Console.WriteLine("Upload of {0} succeeded", transfer.FileName);
                }
            }
    
            return 0;
        }
        catch (Exception e)
        {
            Console.WriteLine("Error: {0}", e);
            return 1;
        }
    }
    
    下载 GetFiles

    下载文件与上传文件代码基本一致,对应的PutFiles改为GetFiles即可

    FTP操作文件

    上传 PutFiles
    public static int WinScpUpload()
    {
        try
        {
            // Setup session options
            SessionOptions sessionOptions = new SessionOptions
            {
                Protocol = Protocol.Ftp,
                HostName = "192.168.xx.xxx",
                PortNumber = 21,// FTP默认端口21
                UserName = "用户名",
                Password = "密码"
            };
    
            using (Session session = new Session())
            {
                // Connect
                session.Open(sessionOptions);
    
                // Upload files
                TransferOptions transferOptions = new TransferOptions();
                transferOptions.TransferMode = TransferMode.Binary;
                
                // PutFiles参数解释:localPath,remotePath,remove,TransferOptions
                // remove:bool,成功后是否删除本地文件,默认false
                var transferResult = session.PutFiles(@"d:	est*", "/home/test/", true, transferOptions);
    
                // Throw on any error
                transferResult.Check();
    
                // Print results
                foreach (TransferEventArgs transfer in transferResult.Transfers)
                {
                    Console.WriteLine("Upload of {0} succeeded", transfer.FileName);
                }
            }
    
            return 0;
        }
        catch (Exception e)
        {
            Console.WriteLine("Error: {0}", e);
            return 1;
        }
    }
    
    下载 GetFiles

    下载文件与上传文件代码基本一致,对应的PutFiles改为GetFiles即可

    // GetFiles参数解释:remotePath,localPath,remove,TransferOptions
    // remove:bool,成功后是否删除远程文件,默认false
    var transferResult = session.GetFiles("/home/test.yao/test.txt", @"d:download", true, transferOptions);
    

    总结

    • SFTP:默认端口22,协议为SFTP,需要有SshHostKeyFingerprint
    • FTP:默认端口21,协议为FTP,不需要SshHostKeyFingerprint
  • 相关阅读:
    使用 awk 命令统计文本
    Mysql基础及系统函数(分享)
    存储过程 :字段按逗号拆分并插入到关联表
    Spring Security SavedRequestAwareAuthenticationSuccessHandler类
    自制Springboot Starter
    vue3 input中回车生成标签
    NOMURA Programming Contest 2022(AtCoder Beginner Contest 253)
    Educational Codeforces Round 129 (Rated for Div. 2)
    Panasonic Programming Contest 2022(AtCoder Beginner Contest 251)
    2022 Google Kick Start Round C
  • 原文地址:https://www.cnblogs.com/cndota2/p/14174513.html
Copyright © 2020-2023  润新知