FTP 文件传输仍然是许多业务系统、自动化任务和传统应用中必不可少的功能。在 .NET C# 技术栈中,有多种方式可以实现稳定可靠的 FTP 上传与下载。本文全面介绍三种常见方法,并提供适用场景与代码示例,帮助你快速上手。
基础方法:使用 WebClient 快速上传/下载
如果仅需快速传输文件,WebClient 是最简便的方式:
using (var client = new WebClient())
{
client.Credentials = new NetworkCredential("username", "password");
// 上传
client.UploadFile("ftp://host/path/file.zip", @"C:\local\file.zip");
// 或下载
client.DownloadFile("ftp://host/path/file.zip", @"C:\local\file.zip");
}
这种方式无需太多配置即可完成传输,适合简单文件操作场景。
精细控制:FtpWebRequest 的灵活使用
遇到需要控制传输模式、监控进度、选择 ASCII/二进制或被动/主动模式时,FtpWebRequest 提供更强大的配置能力:
var request = (FtpWebRequest)WebRequest.Create("ftp://host/path/file.zip");
request.Credentials = new NetworkCredential("username", "password");
request.Method = WebRequestMethods.Ftp.UploadFile;
request.UseBinary = true;
request.UsePassive = true;
using (var fileStream = File.OpenRead(@"C:\local\file.zip"))
using (var ftpStream = request.GetRequestStream())
{
// 简单传输
fileStream.CopyTo(ftpStream);
}
若希望监控上传进度,可按块读取并写入:
byte[] buffer = new byte[10240];
int read;
while ((read = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
ftpStream.Write(buffer, 0, read);
Console.WriteLine($"已上传 {fileStream.Position} 字节");
}
该方式适用于需要控制网络细节的场景,如大文件上传、状态反馈等。
现代方式:FluentFTP 库增强体验
FtpWebRequest 是可用的标准工具,但操作冗长且低级。引入第三方库 FluentFTP 可极大简化开发流程,支持异步操作、重试机制、文件覆盖策略等:
var client = new FtpClient("123.123.123.123", "user", "pass");
client.AutoConnect();
client.UploadFile(@"C:\MyVideo.mp4", "/remote/MyVideo.mp4", FtpRemoteExists.Overwrite, false, FtpVerify.Retry);
client.Disconnect();
还可以以异步方式使用:
var client = new AsyncFtpClient("host", "user", "pass");
await client.AutoConnect();
await client.UploadFile(@"C:\file.mp4", "/remote/file.mp4");
await client.DownloadFile(@"C:\file.mp4", "/remote/file.mp4");
这种方式适合现代 .NET 应用,高效、安全,并具备更好的错误恢复机制。
总结要点与选择建议
- 入门推荐:使用 WebClient,实现简单,适用于小体量、少量操作。
- 精细控制:采用 FtpWebRequest,适合需要复杂配置、传输监控、二进制/被动模式控制等。
- 高效现代:优选 FluentFTP 等第三方库,支持异步、多操作、异常处理、进度反馈,是当前最佳实践。
掌握以上三种 FTP 文件传输方式,你就可以在 .NET C# 环境中灵活应对不同业务场景的需求。无论是快速实现、细致控制还是现代高效开发,本文都提供了清晰可行的指导。选择合适的方案后,还建议结合具体业务进一步测试与优化,确保稳定性和性能。