C# 使用 FluentFTP 基础
|
admin
2024年11月9日 15:42
本文热度 176
|
前言
FTP(File Transfer Protocol)是一种文件传输协议 ,用于网络上进行文件传输与存储空间。在编程中,我们需要从FTP服务器下载文件、查看、删除或将本地文件上传到服务器上。《C# 实现FTP的上传与下载操作》介绍了使用 FtpWebRequest 实现方式。本文简述 FluentFTP 动态库基础。
FluentFTP
1、概述
FluentFTP 是一个完全托管的FTP和FTPS客户端动态库,适用于.NET,优化了速度。支持FTP和FTPS协议,提供了上传、下载、删除、重命名等操作。而且支持断点续传、异步、ASCII和二进制模式传输、代理服务器等。
2、附录
https://github.com/robinrodricks/FluentFTP
通过 NuGet 包管理器引用 FluentFTP 库,或通过引用FluentFTP动态库文件。属性 | 描述 |
---|
Host | FTP 地址 |
Port | 端口,默认:21 |
Credentials | 认证信息,一般是用户账号和密码 |
IsConnected | 是否已建立连接,已建立连接可能未认证 |
IsAuthenticated | 是否已认证,建立在IsConnected之上 |
Status | 状态 |
Encoding | 编码格式,一般采用UTF-8 |
IsEncrypted | 表示当前是否在Ftps协议下使用 |
ValidateCertificate | 证书验证事件,一般采用Ftps会用到 |
Config | 配置对象 |
属性 | 描述 |
---|
DataConnectionType | 设置连接方式,一般主动模式建议用AutoActive,被动模式建议用AutoPassive |
UploadDataType | 上传所使用的传输模式 |
DownloadDataType | 上传所使用的传输模式 |
DownloadZeroByteFiles | 0字节的文件是否需要被下载 |
DownloadRateLimit | 下载速度限制,0表示不限制,单位kb |
UploadRateLimit | 上传速度限制,0表示不限制,单位kb |
RetryAttempts | 当上传或者下载失败是,重新尝试的次数 |
TimeZone | Ftp服务器时区,比如北京市UTC+8,所以写8表示北京时间 |
LocalTimeZone | 本地时区,格式同TimeZone |
EncryptionMode | 加密模式,一般采用Ftps会用到 |
SslProtocols | 加密协议,一般采用Ftps会用到 |
5.1、上传方法
方法 | 描述 |
---|
UploadBytes | 上传文件,文件格式是byte数组 |
UploadDirectory | 上传整个本地目录到服务器 |
UploadFile | 上传文件,文件格式是本地文件路径 |
UploadFiles | 上传多个本地文件到服务器指定目录 |
UploadStream | 上传文件,文件格式是流 |
5.2、下载方法
方法 | 描述 |
---|
DownloadBytes | 下载文件,内容保存在指定的byte数组中 |
DownloadDirectory | 下载远程目录至本地指定目录中 |
DownloadFile | 下载文件,并保存在指定文件中 |
DownloadFiles | 下载多个文件,并保存在指定目录下 |
DownloadStream | 下载文件,内容保存在指定流中 |
5.3、目录方法
方法 | 描述 |
---|
CreateDirectory | 创建目录 |
DeleteDirectory | 删除目录(及文件、子目录) |
DirectoryExists | 判断目录是否已存在 |
GetListing | 获取指定目录(或者当前工作目录)下的所有文件及子目录 |
GetWorkingDirectory | 获取当前的工作目录 |
SetWorkingDirectory | 设置当前的工作目录 |
IsRoot | 当前工作目录是否是根目录 |
MoveDirectory | 移动远程目录到指定位置 |
Rename | 重命名,建议使用MoveDirectory代替 |
EmptyDirectory | 清空指定目录 |
5.4、其他方法
方法 | 描述 |
---|
AutoDetect | 自动发现FTP连接的设置并且返回这些连接的配置文件 |
AutoConnect | 自动发现FTP连接的设置并且使用第一个配置去连接服务器 |
Connect | 开始连接 |
Disconnect | 断开连接 |
5.5、文件操作
方法 | 描述 |
---|
CompareFile | 本地与远程文件进行比较,默认不会下载文件,直接比较文件大小和校验hash散列值 |
DeleteFile | 删除远程文件 |
FileExists | 远程文件是否存在 |
GetChecksum | 获取远程文件的校验hash散列值 |
GetFileSize | 获取远程文件大小 |
MoveFile | 移动文件 |
Rename | 重命名文件,建议使用MoveFile代替 |
代码示例
//同步模式
FtpClient ftpClient = new FtpClient();
// 端口
ftpClient.Port = 21;
// 地址
ftpClient.Host = "127.0.0.1";
// 认证信息,一般是用户账号和密码
ftpClient.Credentials = new System.Net.NetworkCredential("ftp", "ftp123456");
//设置编码
ftpClient.Encoding = Encoding.UTF8;
//Ftp被动模式
ftpClient.Config.DataConnectionType = FtpDataConnectionType.AutoPassive;
//开始连接
ftpClient.Connect();
//设置工作目录
ftpClient.SetWorkingDirectory("Picture");
//上传
ftpClient.UploadFile("ProductImage.jpg", "ProductImage.jpg");
//下载
ftpClient.DownloadFile("ProductImage.jpg", "ProductImage.jpg");
//
using (var fluentClient = new FtpClient("127.0.0.1"))
{
// 认证信息
fluentClient.Credentials = new NetworkCredential("ftp", "ftp123456");
// 开始连接
fluentClient.Connect();
// 将文件保存到本地
using (var fileStream = File.OpenWrite(@"D:\20241005.mp4"))
{
// 下载文件,内容保存在指定流中
fluentClient.DownloadStream(fileStream, "/video/orders/20241005.mp4");
}
// 断开连接
fluentClient.Disconnect();
}
// Fluent 40版本提供了一个异步类 AsyncFtpClient 可以实现异步模式操作
//异步模式
var asyncClient = new AsyncFtpClient("127.0.0.1", "ftpuser", "ftp123456", 21);
//设置编码
ftpClient.Encoding = Encoding.UTF8;
//Ftp被动模式
ftpClient.Config.DataConnectionType = FtpDataConnectionType.AutoPassive;
//开始连接
await ftpClient.Connect();
//设置工作目录
await ftpClient.SetWorkingDirectory("video/orders");
//下载
await ftpClient.DownloadFile("20241005.mp4", "20241005.mp4");
小结
以上主要描述了FluentFTP 动态库的基础内容,了解 FluentFTP 常用属性与方法,我们可以根据这些方法与属性实现 FTP 相关的操作。
该文章在 2024/11/11 19:25:10 编辑过