有关如何使用 SFTP To Go 服务以 C#(一种流行的 Web 开发编程语言)连接到 SFTP 服务器的分步指南。
指南概述
在本指南中,您将使用 SSH.NET 库(一种用于处理 .NET 应用程序中的网络操作的流行框架)探索 C# 中 SFTP 的实际实现。您还将使用 C# 中的 SFTP To Go 来处理专为 SFTP 操作而设计的两个关键组件。
第一个是SFTPClient,这是一个控制台应用程序,允许用户交互式地执行文件操作,例如上传、下载和管理我们的文件SFTP 服务器。读完本指南后,您将了解如何设置并执行这些操作。
第二个是SFTPService,一个类库项目,提供 SFTP 交互所需的底层功能,包括连接到服务器和处理文件操作。
这种拆分确保了由 SFTPClient 提供的用于直接交互的用户界面与封装在其中的核心 SFTP 功能之间的明确分离SFTPService,从而促进不同 C# 项目中的模块化和可重用性。
所以:
无论您是老派 C# 开发人员还是新手,本指南都提供了将 SFTP To Go 集成到 C# 项目中的清晰途径。
放下你的手,说明将在下一节中提供。
一、要求
在深入实施 C# 应用程序中的 SFTP 功能之前,必须满足一些要求才能顺利、成功地集成。
以下是您开始使用时所需要的:
dotnet add package SSH.NET --version 2020.0.0-beta1
此命令将 SSH.NET 库添加到您的项目中,为其配备处理 SFTP 操作所需的工具。
using System;
using DotNetEnv;
class Program
{
static void Main()
{
DotNetEnv.Env.Load(); // Load .env file
string sftpUrl = Environment.GetEnvironmentVariable("SFTPTOGO_URL");
var uri = new Uri(sftpUrl);
// Extracting credentials
string host = uri.Host;
int port = uri.Port;
string username = uri.UserInfo.Split(':')[0];
string password = uri.UserInfo.Split(':')[1];
// Credentials can now be used for SFTP operations
}
}
满足这些要求后,您就可以充分准备将 SFTP 功能集成到 .NET 应用程序中,从而增强其安全管理与外部服务器的文件传输的能力。
但说实话,这些要求很重要。
2. C#中SFTP操作的SftpService类
SftpService 类是在 .NET 应用程序中实现 SFTP 操作的基石。此类封装了与 SFTP 服务器交互所需的功能,为上传、下载、列出和删除文件等文件操作提供了简化且安全的方法。
SftpService 类应设计为处理各种文件操作。它依赖于 SSH.NET 库,这有助于与 SFTP 服务器交互。该类应包括:
依赖项:
构造函数:
SftpService 中的每个方法对应一个特定的 SFTP 操作:
这是 SftpService 类的简化版本:
public class SftpService : ISftpService
{
private readonly ILogger<SftpService> _logger;
private readonly SftpConfig _config;
public SftpService(ILogger<SftpService> logger, SftpConfig sftpConfig)
{
_logger = logger;
_config = sftpConfig;
}
public IEnumerable<ISftpFile> ListAllFiles(string remoteDirectory = ".")
{
var client = new SftpClient(_config.Host, _config.Port,
_config.UserName, _config.Password);
client.Connect();
Console.WriteLine("Connected!");
return client.ListDirectory(remoteDirectory);
}
public void UploadFile(string localFilePath, string remoteFilePath)
{
var client = new SftpClient(_config.Host, _config.Port == 0 ? 22 : _config.Port,
_config.UserName, _config.Password);
client.Connect();
var s = File.OpenRead(localFilePath);
client.UploadFile(s, remoteFilePath);
}
public void DownloadFile(string remoteFilePath, string localFilePath)
{
var client = new SftpClient(_config.Host, _config.Port == 0 ? 22 : _config.Port,
_config.UserName, _config.Password);
client.Connect();
var s = File.Create(localFilePath);
client.DownloadFile(remoteFilePath, s);
Console.WriteLine($"Finished downloading file!");
}
public void DeleteFile(string remoteFilePath)
{
var client = new SftpClient(_config.Host, _config.Port == 0 ? 22 : _config.Port,
_config.UserName, _config.Password);
client.Connect();
client.DeleteFile(remoteFilePath);
Console.WriteLine($"File [{remoteFilePath}] deleted.");
}
通过以下方式将SftpService集成到您的 .NET 应用程序中:
正确配置 SFTP 是确保 C# 应用程序和 SFTP 服务器(例如 SFTP To Go 服务器)之间安全有效通信的基础。这涉及设置必要的参数,使您的应用程序能够连接到 SFTP 服务器并与之交互。具体方法如下:
SFTP 配置需要有关 SFTP 服务器的特定详细信息。这些细节包括:
SftpConfig 类保存配置详细信息。这是一个简单的类,其属性与必要的 SFTP 服务器详细信息相对应:
public class SftpConfig{
public string Host { get; set; }
public int Port { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
您可以根据信息的敏感性和应用程序的架构,以多种方式填充 SftpConfig 对象:
以下是使用环境变量设置 SftpConfig 的示例:
var config = new SftpConfig{
Host = "your_sftp_server.com",
Port = 22, // Default SFTP port
UserName = "your_username",
Password = "your_password"
}
填充 SftpConfig 对象后,将其传递给 SftpService< i=4> 类:
var sftpService = new SftpService(new NullLogger<SftpService>(), config);
有些人仍然去上班——他们甚至不能穿睡衣。 🥲
3. C#中使用SftpService执行SFTP操作
将 SftpService 配置到 C# 应用程序后,您就可以开始执行各种 SFTP 操作。这些操作对于管理远程 SFTP 服务器上的文件至关重要。以下是有关使用 SftpService 执行关键 SFTP 操作的综合指南:
列出 SFTP 服务器上目录中的文件:
var files = sftpService.ListAllFiles("/");
foreach (var file in files){
if (file.IsDirectory){
Console.WriteLine($"Directory: [{file.FullName}]");
}
else if (file.IsRegularFile){
Console.WriteLine($"File: [{file.FullName}]");
}
}
要将文件从服务器下载到您的系统:
const string pngFile = @"test.png";
File.Delete(pngFile);
sftpService.DownloadFile(@"/folder/imap-console-client.png", pngFile);
if (File.Exists(pngFile)){
Console.WriteLine($"file {pngFile} downloaded");
}
要将文件从您的系统上传到 SFTP 服务器:
var testFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "test.txt");
sftpService.UploadFile(testFile, @"/folder/test.txt");
只需使用以下语句即可从 SFTP 服务器上删除文件:
sftpService.DeleteFile(@"/folder/test.txt");
每个操作都包装在 try-catch 块中,以处理 SFTP 操作期间的任何异常。正确记录这些异常对于诊断生产中的问题至关重要。
SftpService 类旨在处理每个方法中的连接生命周期,确保根据需要打开和关闭连接。这可以避免不必要地打开连接,并处理操作期间可能出现的任何连接问题。
要关闭连接,请使用 Disconnect 方法,该方法将在调用操作方法时使用 SftpService 类中正式创建的客户端对象来调用:
client.Disconnect();
读完本文后,您的大脑有何感受。
4. 整个事情
您现在已经全面了解了如何在 C# 中设置和使用 SftpService 通过 SFTP 进行安全文件操作。您可能希望从头到尾运行整个程序,将所有这些部分放在一起,并查看完整的实施情况。
完整代码,包括SftpService类、SftpConfig 设置以及各种SFTP操作的示例(如列出文件、上传、下载、删除),供您参考和使用。
要访问并运行完整的程序,请访问SFTP To Go 示例 GitHub 存储库。该存储库包含本文中讨论的所有代码,组织整齐并准备好执行。您可以通过以下方式访问它:
git clone https://github.com/crazyantlabs/sftptogo-examples.git
3.导航到 dotnet 子目录:克隆存储库后,您可以导航到克隆存储库中的 dotnet 子目录:
cd sftptogo-examples/dotnet
4。打开并运行:在您首选的 .NET IDE 中打开下载的项目并运行它以查看 SftpService 的运行情况。