zoukankan      html  css  js  c++  java
  • 基于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
  • 相关阅读:
    vue学习(十四) 条件搜索框动态查询表中数据 数组的新方法
    vue学习(十三) 删除对象数组中的某个元素
    数据库管理
    PHP基础
    PHP基础之常量与变量
    Cobalt Strike简单使用
    phpstudy后门利用复现
    DNS劫持
    远程控制(远控Bin)
    php基础
  • 原文地址:https://www.cnblogs.com/cndota2/p/14174513.html
Copyright © 2011-2022 走看看