You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#实现SFTP文件上传并重命名的免费方案咨询

在C#中实现SFTP传输并重命名的免费方案

嘿,你的需求完全可以通过免费的开源库来实现!.NET本身没有原生的SFTP客户端支持,但有个非常成熟的开源库SSH.NET,MIT许可(完全免费商用),支持所有主流.NET平台(.NET Framework、.NET Core/.NET 5+),绝对是处理SFTP操作的首选。

为什么选SSH.NET?

  • 轻量易用,通过NuGet就能一键安装
  • 支持SFTP的全量操作:上传、下载、重命名、删除、目录管理等
  • 支持用户名密码、密钥等多种认证方式
  • 社区活跃,遇到问题很容易找到解决方案

具体实现步骤

1. 安装SSH.NET

打开你的项目,通过NuGet包管理器搜索SSH.NET并安装,或者用命令行:

# NuGet包管理器控制台
Install-Package SSH.NET

# .NET CLI
dotnet add package SSH.NET

2. 上传并重命名的完整代码示例

下面是一个可直接复用的方法,包含连接SFTP服务器、上传本地文件、重命名远程文件的完整逻辑:

using Renci.SshNet;
using System;
using System.IO;

public class SftpHelper
{
    public void UploadAndRenameToSftp(string sftpHost, int sftpPort, string username, string password,
                                      string localFilePath, string remoteTempName, string remoteFinalName)
    {
        // 使用using自动释放客户端资源
        using var sftpClient = new SftpClient(sftpHost, sftpPort, username, password);
        
        try
        {
            sftpClient.Connect();
            if (!sftpClient.IsConnected)
            {
                throw new InvalidOperationException("无法建立与SFTP服务器的连接");
            }

            // 读取本地文件并上传(先使用临时文件名,避免上传中被读取)
            using var fileStream = new FileStream(localFilePath, FileMode.Open, FileAccess.Read);
            sftpClient.UploadFile(fileStream, remoteTempName);
            Console.WriteLine($"文件已上传至服务器,临时文件名:{remoteTempName}");

            // 处理重命名逻辑:如果目标文件已存在,可根据需求选择覆盖或报错
            if (sftpClient.Exists(remoteFinalName))
            {
                // 示例:删除已存在的旧文件,也可以抛出异常提示冲突
                sftpClient.Delete(remoteFinalName);
                Console.WriteLine($"已删除服务器上已存在的文件:{remoteFinalName}");
            }
            
            // 重命名为最终文件名
            sftpClient.RenameFile(remoteTempName, remoteFinalName);
            Console.WriteLine($"文件已重命名为:{remoteFinalName}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"SFTP操作失败:{ex.Message}");
            throw; // 可以根据业务需求调整异常处理逻辑
        }
        finally
        {
            if (sftpClient.IsConnected)
            {
                sftpClient.Disconnect();
            }
        }
    }
}

代码说明

  • 使用using语句确保SftpClient和FileStream自动释放资源,避免内存泄漏
  • 先上传为临时文件,再重命名的做法可以避免其他服务读取到未上传完成的不完整文件,是生产环境的最佳实践
  • 支持密钥认证:如果你的SFTP服务器用密钥登录,只需把SftpClient的构造函数换成带PrivateKeyFile参数的版本即可

其他注意事项

  • 确认SFTP服务器的端口(默认22)已对外开放,且你的账号拥有文件上传、重命名的权限
  • 处理大文件时,可以使用UploadFile的重载方法添加进度回调,实时监控上传进度
  • SSH.NET还支持批量文件操作、目录创建/删除等,可根据需求扩展功能

内容的提问来源于stack exchange,提问作者Acav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:04:45