前言
FTP(File Transfer Protocol)是一種文件傳輸協議 ,用于網絡上進行文件傳輸與存儲空間。在編程中,我們需要從FTP服務器下載文件、查看、刪除或將本地文件上傳到服務器上?!?a target="_blank" textvalue="C# 實現FTP的上傳與下載操作" linktype="text" imgurl="" imgdata="null" data-itemshowtype="0" tab="innerlink" data-linktype="2" hasload="1" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);padding: 0px;outline: 0px;-webkit-user-drag: none;cursor: default;max-width: 100%;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important" _>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 編輯過