基于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
原文地址:https://www.cnblogs.com/cndota2/p/14174513.html