FTP工具FileZilla&WinSCP與FTP類庫FluentFTP
阿新 • • 發佈:2018-12-20
FileZilla
Filezilla分為client和server。其中FileZilla Server是Windows平臺下一個小巧的第三方FTP伺服器軟體,系統資源也佔用非常小,可以讓你快速簡單的建立自己的FTP伺服器。
開啟FileZilla,進行如下操作
下圖紅色區域就是linux系統的檔案目錄,可以直接把windows下的檔案直接拖拽進去
WinSCP
跟FileZilla一樣,也是一款十分方便的檔案傳輸工具。WinSCP是連線Windows和Linux的。
FluentFTP
github:https://github.com/robinrodricks/FluentFTP
舉例:
// create an FTP client FtpClient client = new FtpClient("123.123.123.123"); // if you don't specify login credentials, we use the "anonymous" user account client.Credentials = new NetworkCredential("david", "pass123"); // begin connecting to the server client.Connect(); // get a list of files and directories in the "/htdocs" folderforeach (FtpListItem item in client.GetListing("/htdocs")) { // if this is a file if (item.Type == FtpFileSystemObjectType.File){ // get the file size long size = client.GetFileSize(item.FullName); } // get modified date/time of the file or folderDateTime time = client.GetModifiedTime(item.FullName); // calculate a hash for the file on the server side (default algorithm) FtpHash hash = client.GetHash(item.FullName); } // upload a file client.UploadFile(@"C:\MyVideo.mp4", "/htdocs/big.txt"); // rename the uploaded file client.Rename("/htdocs/big.txt", "/htdocs/big2.txt"); // download the file again client.DownloadFile(@"C:\MyVideo_2.mp4", "/htdocs/big2.txt"); // delete the file client.DeleteFile("/htdocs/big2.txt"); // delete a folder recursively client.DeleteDirectory("/htdocs/extras/"); // check if a file exists if (client.FileExists("/htdocs/big2.txt")){ } // check if a folder exists if (client.DirectoryExists("/htdocs/extras/")){ } // upload a file and retry 3 times before giving up client.RetryAttempts = 3; client.UploadFile(@"C:\MyVideo.mp4", "/htdocs/big.txt", FtpExists.Overwrite, false, FtpVerify.Retry); // disconnect! good bye! client.Disconnect();
對FluentFTP操作類封裝
public class FtpFileMetadata { public long FileLength { get; set; } public string MD5Hash { get; set; } public DateTime LastModifyTime { get; set; } } public class FtpHelper { private FtpClient _client = null; private string _host = "127.0.0.1"; private int _port = 21; private string _username = "Anonymous"; private string _password = ""; private string _workingDirectory = ""; public string WorkingDirectory { get { return _workingDirectory; } } public FtpHelper(string host, int port, string username, string password) { _host = host; _port = port; _username = username; _password = password; } public Stream GetStream(string remotePath) { Open(); return _client.OpenRead(remotePath); } public void Get(string localPath, string remotePath) { Open(); _client.DownloadFile(localPath, remotePath, true); } public void Upload(Stream s, string remotePath) { Open(); _client.Upload(s, remotePath, FtpExists.Overwrite, true); } public void Upload(string localFile, string remotePath) { Open(); using (FileStream fileStream = new FileStream(localFile, FileMode.Open)) { _client.Upload(fileStream, remotePath, FtpExists.Overwrite, true); } } public int UploadFiles(IEnumerable<string> localFiles, string remoteDir) { Open(); List<FileInfo> files = new List<FileInfo>(); foreach (var lf in localFiles) { files.Add(new FileInfo(lf)); } int count = _client.UploadFiles(files, remoteDir, FtpExists.Overwrite, true, FtpVerify.Retry); return count; } public void MkDir(string dirName) { Open(); _client.CreateDirectory(dirName); } public bool FileExists(string remotePath) { Open(); return _client.FileExists(remotePath); } public bool DirExists(string remoteDir) { Open(); return _client.DirectoryExists(remoteDir); } public FtpListItem[] List(string remoteDir) { Open(); var f = _client.GetListing(); FtpListItem[] listItems = _client.GetListing(remoteDir); return listItems; } public FtpFileMetadata Metadata(string remotePath) { Open(); long size = _client.GetFileSize(remotePath); DateTime lastModifyTime = _client.GetModifiedTime(remotePath); return new FtpFileMetadata() { FileLength = size, LastModifyTime = lastModifyTime }; } public bool TestConnection() { return _client.IsConnected; } public void SetWorkingDirectory(string remoteBaseDir) { Open(); if (!DirExists(remoteBaseDir)) MkDir(remoteBaseDir); _client.SetWorkingDirectory(remoteBaseDir); _workingDirectory = remoteBaseDir; } private void Open() { if (_client == null) { _client = new FtpClient(_host, new System.Net.NetworkCredential(_username, _password)); _client.Port = 21; _client.RetryAttempts = 3; if (!string.IsNullOrWhiteSpace(_workingDirectory)) { _client.SetWorkingDirectory(_workingDirectory); } } } }