前言
FTP(File Transfer Protocol)是一種文件傳輸協(xié)議 ,用于網(wǎng)絡(luò)上進(jìn)行文件傳輸與存儲(chǔ)空間。在編程中,我們需要從FTP服務(wù)器下載文件、查看、刪除或?qū)⒈镜匚募蟼鞯椒?wù)器上。《C# 實(shí)現(xiàn)FTP的上傳與下載操作》介紹了使用 FtpWebRequest 實(shí)現(xiàn)方式。本文簡(jiǎn)述 FluentFTP 動(dòng)態(tài)庫(kù)基礎(chǔ)。
FluentFTP
1、概述
FluentFTP 是一個(gè)完全托管的FTP和FTPS客戶端動(dòng)態(tài)庫(kù),適用于.NET,優(yōu)化了速度。支持FTP和FTPS協(xié)議,提供了上傳、下載、刪除、重命名等操作。而且支持?jǐn)帱c(diǎn)續(xù)傳、異步、ASCII和二進(jìn)制模式傳輸、代理服務(wù)器等。
2、附錄
https://github.com/robinrodricks/FluentFTP
通過 NuGet 包管理器引用 FluentFTP 庫(kù),或通過引用FluentFTP動(dòng)態(tài)庫(kù)文件。// 動(dòng)態(tài)庫(kù)文件
FluentFTP.dll
屬性 | 描述 |
---|
Host | FTP 地址 |
Port | 端口,默認(rèn):21 |
Credentials | 認(rèn)證信息,一般是用戶賬號(hào)和密碼 |
IsConnected | 是否已建立連接,已建立連接可能未認(rèn)證 |
IsAuthenticated | 是否已認(rèn)證,建立在IsConnected之上 |
Status | 狀態(tài) |
Encoding | 編碼格式,一般采用UTF-8 |
IsEncrypted | 表示當(dāng)前是否在Ftps協(xié)議下使用 |
ValidateCertificate | 證書驗(yàn)證事件,一般采用Ftps會(huì)用到 |
Config | 配置對(duì)象 |
屬性 | 描述 |
---|
DataConnectionType | 設(shè)置連接方式,一般主動(dòng)模式建議用AutoActive,被動(dòng)模式建議用AutoPassive |
UploadDataType | 上傳所使用的傳輸模式 |
DownloadDataType | 上傳所使用的傳輸模式 |
DownloadZeroByteFiles | 0字節(jié)的文件是否需要被下載 |
DownloadRateLimit | 下載速度限制,0表示不限制,單位kb |
UploadRateLimit | 上傳速度限制,0表示不限制,單位kb |
RetryAttempts | 當(dāng)上傳或者下載失敗是,重新嘗試的次數(shù) |
TimeZone | Ftp服務(wù)器時(shí)區(qū),比如北京市UTC+8,所以寫8表示北京時(shí)間 |
LocalTimeZone | 本地時(shí)區(qū),格式同TimeZone |
EncryptionMode | 加密模式,一般采用Ftps會(huì)用到 |
SslProtocols | 加密協(xié)議,一般采用Ftps會(huì)用到 |
5.1、上傳方法
方法 | 描述 |
---|
UploadBytes | 上傳文件,文件格式是byte數(shù)組 |
UploadDirectory | 上傳整個(gè)本地目錄到服務(wù)器 |
UploadFile | 上傳文件,文件格式是本地文件路徑 |
UploadFiles | 上傳多個(gè)本地文件到服務(wù)器指定目錄 |
UploadStream | 上傳文件,文件格式是流 |
5.2、下載方法
方法 | 描述 |
---|
DownloadBytes | 下載文件,內(nèi)容保存在指定的byte數(shù)組中 |
DownloadDirectory | 下載遠(yuǎn)程目錄至本地指定目錄中 |
DownloadFile | 下載文件,并保存在指定文件中 |
DownloadFiles | 下載多個(gè)文件,并保存在指定目錄下 |
DownloadStream | 下載文件,內(nèi)容保存在指定流中 |
5.3、目錄方法
方法 | 描述 |
---|
CreateDirectory | 創(chuàng)建目錄 |
DeleteDirectory | 刪除目錄(及文件、子目錄) |
DirectoryExists | 判斷目錄是否已存在 |
GetListing | 獲取指定目錄(或者當(dāng)前工作目錄)下的所有文件及子目錄 |
GetWorkingDirectory | 獲取當(dāng)前的工作目錄 |
SetWorkingDirectory | 設(shè)置當(dāng)前的工作目錄 |
IsRoot | 當(dāng)前工作目錄是否是根目錄 |
MoveDirectory | 移動(dòng)遠(yuǎn)程目錄到指定位置 |
Rename | 重命名,建議使用MoveDirectory代替 |
EmptyDirectory | 清空指定目錄 |
5.4、其他方法
方法 | 描述 |
---|
AutoDetect | 自動(dòng)發(fā)現(xiàn)FTP連接的設(shè)置并且返回這些連接的配置文件 |
AutoConnect | 自動(dòng)發(fā)現(xiàn)FTP連接的設(shè)置并且使用第一個(gè)配置去連接服務(wù)器 |
Connect | 開始連接 |
Disconnect | 斷開連接 |
5.5、文件操作
方法 | 描述 |
---|
CompareFile | 本地與遠(yuǎn)程文件進(jìn)行比較,默認(rèn)不會(huì)下載文件,直接比較文件大小和校驗(yàn)hash散列值 |
DeleteFile | 刪除遠(yuǎn)程文件 |
FileExists | 遠(yuǎn)程文件是否存在 |
GetChecksum | 獲取遠(yuǎn)程文件的校驗(yàn)hash散列值 |
GetFileSize | 獲取遠(yuǎn)程文件大小 |
MoveFile | 移動(dòng)文件 |
Rename | 重命名文件,建議使用MoveFile代替 |
代碼示例
//同步模式
FtpClient ftpClient = new FtpClient();
// 端口
ftpClient.Port = 21;
// 地址
ftpClient.Host = "127.0.0.1";
// 認(rèn)證信息,一般是用戶賬號(hào)和密碼
ftpClient.Credentials = new System.Net.NetworkCredential("ftp", "ftp123456");
//設(shè)置編碼
ftpClient.Encoding = Encoding.UTF8;
//Ftp被動(dòng)模式
ftpClient.Config.DataConnectionType = FtpDataConnectionType.AutoPassive;
//開始連接
ftpClient.Connect();
//設(shè)置工作目錄
ftpClient.SetWorkingDirectory("Picture");
//上傳
ftpClient.UploadFile("ProductImage.jpg", "ProductImage.jpg");
//下載
ftpClient.DownloadFile("ProductImage.jpg", "ProductImage.jpg");
//
using (var fluentClient = new FtpClient("127.0.0.1"))
{
// 認(rèn)證信息
fluentClient.Credentials = new NetworkCredential("ftp", "ftp123456");
// 開始連接
fluentClient.Connect();
// 將文件保存到本地
using (var fileStream = File.OpenWrite(@"D:\20241005.mp4"))
{
// 下載文件,內(nèi)容保存在指定流中
fluentClient.DownloadStream(fileStream, "/video/orders/20241005.mp4");
}
// 斷開連接
fluentClient.Disconnect();
}
// Fluent 40版本提供了一個(gè)異步類 AsyncFtpClient 可以實(shí)現(xiàn)異步模式操作
//異步模式
var asyncClient = new AsyncFtpClient("127.0.0.1", "ftpuser", "ftp123456", 21);
//設(shè)置編碼
ftpClient.Encoding = Encoding.UTF8;
//Ftp被動(dòng)模式
ftpClient.Config.DataConnectionType = FtpDataConnectionType.AutoPassive;
//開始連接
await ftpClient.Connect();
//設(shè)置工作目錄
await ftpClient.SetWorkingDirectory("video/orders");
//下載
await ftpClient.DownloadFile("20241005.mp4", "20241005.mp4");
小結(jié)
以上主要描述了FluentFTP 動(dòng)態(tài)庫(kù)的基礎(chǔ)內(nèi)容,了解 FluentFTP 常用屬性與方法,我們可以根據(jù)這些方法與屬性實(shí)現(xiàn) FTP 相關(guān)的操作。
該文章在 2024/11/11 19:25:10 編輯過