日本xxxx18视频在线观看-日本xxxx1819-日本xxxwww在线观看-日本xxx-日本xx-日本www在线视频

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C#利用FluentFTP實現FTP上傳下載功能詳解

admin
2023年10月9日 9:54 本文熱度 1059
FTP作為日常工作學習中,非常重要的一個文件傳輸存儲空間,想必大家都非常的熟悉了,那么如何快速的實現文件的上傳下載功能呢,本文以一個簡單的小例子,簡述如何通過FluentFTP實現文件的上傳和下載功能

FTP作為日常工作學習中,非常重要的一個文件傳輸存儲空間,想必大家都非常的熟悉了,那么如何快速的實現文件的上傳下載功能呢,本文以一個簡單的小例子,簡述如何通過FluentFTP實現文件的上傳和下載功能。僅供學習分享使用,如有不足之處,還請指正。

FTP基礎知識

文件傳輸協議(File Transfer Protocol,FTP)是用于在網絡上進行文件傳輸的一套標準協議,它工作在 OSI 模型的第七層, TCP 模型的第四層, 即應用層, 使用 TCP 傳輸而不是 UDP, 客戶在和服務器建立連接前要經過一個“三次握手”的過程, 保證客戶與服務器之間的連接是可靠的, 而且是面向連接, 為數據傳輸提供可靠保證。FTP允許用戶以文件操作的方式(如文件的增、刪、改、查、傳送等)與另一主機相互通信。然而, 用戶并不真正登錄到自己想要存取的計算機上面而成為完全用戶, 可用FTP程序訪問遠程資源, 實現用戶往返傳輸文件、目錄管理以及訪問電子郵件等等, 即使雙方計算機可能配有不同的操作系統和文件存儲方式。

FTP環境搭建

在windows操作系統中,FTP可以通過(Internet Inforamtion Services, IIS)管理器進行創建,創建成功后即可進行查看,如下所示:

FluentFTP安裝

FluentFTP是一款基于.Net的FTP和FTPS的客戶端動態庫,操作簡單便捷。

首先創建基于.Net Framework 4.6.1的winform應用程序,然后通過Nuget包管理器進行安裝,如下所示:

示例演示

主要實現基于FTP的上傳,下載,瀏覽等功能,如下所示:

進入文件夾及右鍵下載,如下所示:

示例源碼

FtpHelper類源碼,封裝了FTP文件的檢索,上傳,下載等功能,如下所示:

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Net;

using System.Text;

using System.Threading;

using System.Threading.Tasks;

using FluentFTP;

 

namespace DemoFtp

{

    public class FtpHelper

    {

        #region 屬性與構造函數

 

        /// <summary>

        /// IP地址

        /// </summary>

        public string IpAddr { get; set; }

 

        /// <summary>

        /// 相對路徑

        /// </summary>

        public string RelatePath { get; set; }

 

        /// <summary>

        /// 端口號

        /// </summary>

        public int Port { get; set; }

 

        /// <summary>

        /// 用戶名

        /// </summary>

        public string UserName { get; set; }

 

        /// <summary>

        /// 密碼

        /// </summary>

        public string Password { get; set; }

 

        public FtpHelper()

        {

 

        }

 

        public FtpHelper(string ipAddr, int port, string userName, string password, string relatePath)

        {

            this.IpAddr = ipAddr;

            this.Port = port;

            this.UserName = userName;

            this.Password = password;

            this.RelatePath = relatePath;

        }

 

        #endregion

 

        #region 方法

 

        public FtpListItem[] ListDir() {

            FtpListItem[] lists;

            using (var ftpClient = new FtpClient(this.IpAddr, this.UserName, this.Password, this.Port))

            {

                ftpClient.Connect();

                ftpClient.SetWorkingDirectory(this.RelatePath);

                lists = ftpClient.GetListing();

            }

            return lists;

        }

 

        public void UpLoad(string dir, string file, out bool isOk)

        {

            isOk = false;

            FileInfo fi = new FileInfo(file);

            using (FileStream fs = fi.OpenRead())

            {

                //long length = fs.Length;

                using (var ftpClient = new FtpClient(this.IpAddr, this.UserName, this.Password, this.Port))

                {

                    ftpClient.Connect();

                    ftpClient.SetWorkingDirectory(this.RelatePath);

                    string remotePath = dir + "/" + Path.GetFileName(file);

                    var ftpRemodeExistsMode = file.EndsWith(".txt") ? FtpRemoteExists.Overwrite : FtpRemoteExists.Skip;

                    FtpStatus status = ftpClient.UploadStream(fs, remotePath, ftpRemodeExistsMode, true);

                    isOk = status == FtpStatus.Success;

                }

            } 

        }

 

        /// <summary>

        /// 上傳多個文件

        /// </summary>

        /// <param name="files"></param>

        /// <param name="isOk"></param>

        public void UpLoad(string dir, string[] files, out bool isOk)

        {

            isOk = false;

            if (CheckDirIsExists(dir))

            {

                foreach (var file in files)

                {

                    UpLoad(dir, file, out isOk);

                }

            }

        } 

 

        private bool CheckDirIsExists(string dir)

        {

            bool flag = false;

            using (var ftpClient = new FtpClient(this.IpAddr, this.UserName, this.Password, this.Port))

            {

                ftpClient.Connect();

                ftpClient.SetWorkingDirectory(this.RelatePath);

                flag = ftpClient.DirectoryExists(dir);

                if (!flag)

                {

                    flag = ftpClient.createDirectory(dir);

                }

            }

            return flag;

        }

 

        /// <summary>

        /// 下載ftp

        /// </summary>

        /// <param name="localAddress"></param>

        /// <param name="remoteAddress"></param>

        /// <returns></returns>

        public bool DownloadFile(string localAddress, string remoteAddress)

        {

            using (var ftpClient = new FtpClient(this.IpAddr, this.UserName, this.Password, this.Port))

            {

                ftpClient.SetWorkingDirectory("/");

                ftpClient.Connect();

                if (ftpClient.DownloadFile(localAddress, remoteAddress) == FtpStatus.Success)

                {

                    return true;

                }

                return false;

            }

        }

 

        #endregion

    }

}

每一個FTP文件或文件夾,由一個自定義用戶控件【PictureBox+Label+ContextMenu】表示,這樣便于處理與顯示:

using DemoFtp.Properties;

using FluentFTP;

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.IO;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

 

namespace DemoFtp

{

    public partial class FtpElementControl : UserControl

    {

        public Action<FtpListItem> SubFolderClick;

 

        public Action<FtpListItem> DownLoadClick;

 

        private FtpListItem ftpListItem;

 

        public FtpElementControl(FtpListItem ftpListItem)

        {

            InitializeComponent();

            this.ftpListItem = ftpListItem;

        }

 

        public FtpElementControl()

        {

            InitializeComponent();

        }

 

        public void InitControl()

        {

            if (ftpListItem.Type == FtpObjectType.Directory)

            {

                this.pbIcon.Image = Resources.folder.ToBitmap();

            }

            else if (ftpListItem.Type == FtpObjectType.File)

            {

                var name = ftpListItem.Name;

                var ext = Path.GetExtension(name).ToLower().Substring(1);

                if (ext == "png" || ext == "jpeg" || ext == "jpg" || ext == "bmp" || ext == "gif")

                {

                    this.pbIcon.Image = Resources.pictures.ToBitmap();

                }

                else if (ext == "doc" || ext == "docx")

                {

                    this.pbIcon.Image = Resources.doc.ToBitmap();

                }

                else if (ext == "exe")

                {

                    this.pbIcon.Image = Resources.setup.ToBitmap();

                }

                else

                {

                    this.pbIcon.Image = Resources.file;

                }

            }

            else

            {

                this.pbIcon.Image = Resources.file;

            }

            this.lblName.Text = ftpListItem.Name;

        }

 

        private void FtpElementControl_Load(object sender, EventArgs e)

        {

 

        }

 

        /// <summary>

        /// 子菜單下載功能

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void menu_ItemClicked(object sender, ToolStripItemClickedEventArgs e)

        {

            this.DownLoadClick?.Invoke(ftpListItem);

        }

 

        /// <summary>

        /// 雙擊打開

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void pbIcon_DoubleClick(object sender, EventArgs e)

        {

            this.SubFolderClick?.Invoke(ftpListItem);

        }

    }

}

主頁面由一系列用戶操作框和按鈕組成,完成對FTP的基本操作,如下所示:

using FluentFTP;

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.IO;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

 

namespace DemoFtp

{

    public partial class MainForm : Form

    {

        private FtpHelper ftpHelper;

 

        public MainForm()

        {

            InitializeComponent();

        }

 

        private void btnLogin_Click(object sender, EventArgs e)

        {

            var url = txtFtpUrl.Text;

            var userName = txtUserName.Text;

            var password = txtPassword.Text;

            var port = txtPort.Text;

            if (this.lblRelatePath.Text != "/")

            {

                this.lblRelatePath.Text = "/";

            }

            var relatePath = this.lblRelatePath.Text;

            if (string.IsNullOrEmpty(url) || string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(port))

            {

                MessageBox.Show("路徑和賬號密碼不可為空");

                return;

            }

            if (ftpHelper == null)

            {

                ftpHelper = new FtpHelper(url, int.Parse(port), userName, password, relatePath);

 

            }

            ListDir();

        }

 

        public void SubFolder(FtpListItem ftpListItem)

        {

            if (ftpListItem.Type == FtpObjectType.Directory)

            {

                var fullName = ftpListItem.FullName;

                ftpHelper.RelatePath = fullName;

                ListDir();

                this.lblRelatePath.Text = fullName;

            }

        }

   

        private void Download(FtpListItem ftpListItem) {

            var fullName=ftpListItem.FullName;

            var fileName = Path.GetFileName(fullName);

            SaveFileDialog sfd = new SaveFileDialog();

            sfd.FileName = fileName;

            sfd.Title = "不載";

            sfd.Filter = "所有文檔|*.*";

            if (DialogResult.OK == sfd.ShowDialog()) {

                ftpHelper.DownloadFile(sfd.FileName, fullName);

            }

        }

 

        private void ListDir()

        {

            this.ftpContainer.Controls.Clear();

            var ftpListItems = this.ftpHelper.ListDir();

            if (ftpListItems != null && ftpListItems.Length > 0)

            {

                foreach (var ftpListItem in ftpListItems)

                {

                    FtpElementControl ftpControl = new FtpElementControl(ftpListItem);

                    ftpControl.InitControl();

                    ftpControl.DownLoadClick += Download;

                    ftpControl.SubFolderClick += SubFolder;

                    this.ftpContainer.Controls.Add(ftpControl);

                }

            }

        }

 

        private void btnUpload_Click(object sender, EventArgs e)

        {

            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Filter = "所有文件|*.*";

            ofd.Title = "請選擇需要上傳的文件";

            if (DialogResult.OK == ofd.ShowDialog()) {

                var localFile=ofd.FileName;

                ftpHelper.UpLoad(this.lblRelatePath.Text, localFile, out bool isOk);

                if (isOk) {

                    ListDir();

                }

            }

        }

 

        private void pbReturn_Click(object sender, EventArgs e)

        {

            var relativePath=this.lblRelatePath.Text;

            if (relativePath == "/") {

                return;

            }

            relativePath = relativePath.Substring(0, relativePath.LastIndexOf("/")+1);

            ftpHelper.RelatePath=relativePath;

            ListDir();

            this.lblRelatePath.Text = relativePath;

        }

    }

}


該文章在 2025/4/30 9:41:19 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产精品夜夜春夜夜 | 国产第一在 | 日韩另类 | 成人精品一区二区三 | 一个人在线视频免费观看www | 欧美日韩精品在线视频一区 | 欧美日韩在线视频播放 | 成人免费观看视 | 91精品91免费观看 | 日本精品aⅴ在线观看 | 日本一区二区三区www | 国产精品视区一二二中文字幕 | 国产va免费视频一区二区三区 | 91平台 | 国产精品第1页 | 国产真实乱子伦精品视频 | 爱城亚洲区 | 日韩一区免费视频 | 日韩国产欧美一区二区三区 | 欧美人成在线观 | 日本特黄大片正在播放 | 日本亚洲视 | 亚洲成aⅴ人在线观看 | 日本黄本道一区二区在线观看 | 91免费在| 国产在线观看自拍日本 | 久热爱精品视频线路一 | 韩日欧美 | 国产一区二区三区在线免费 | 国产国产人免费人成免 | 国产一级特黄a大片99 | 欧美国产日韩一区 | 日韩欧美日韩国产一区 | 日韩精品国产精品 | 91欧美视频 | 国产喷潮在线播放一 | 国产不卡高清在线观看视频 | 欧美高清国产一区二区三区 | 国产精品碰碰现在自 | 国产又色又爽又黄的 | 国产中文亚洲日韩欧美 |