午夜视频在线观看区二区-午夜视频在线观看视频-午夜视频在线观看视频在线观看-午夜视频在线观看完整高清在线-午夜视频在线观看网站-午夜视频在线观看亚洲天堂

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#利用FluentFTP實(shí)現(xiàn)FTP上傳下載功能詳解

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

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

FTP基礎(chǔ)知識

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

FTP環(huán)境搭建

在windows操作系統(tǒng)中,F(xiàn)TP可以通過(Internet Inforamtion Services, IIS)管理器進(jìn)行創(chuàng)建,創(chuàng)建成功后即可進(jìn)行查看,如下所示:

FluentFTP安裝

FluentFTP是一款基于.Net的FTP和FTPS的客戶端動(dòng)態(tài)庫,操作簡單便捷。

首先創(chuàng)建基于.Net Framework 4.6.1的winform應(yīng)用程序,然后通過Nuget包管理器進(jìn)行安裝,如下所示:

示例演示

主要實(shí)現(xiàn)基于FTP的上傳,下載,瀏覽等功能,如下所示:

進(jìn)入文件夾及右鍵下載,如下所示:

示例源碼

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 屬性與構(gòu)造函數(shù)

 

        /// <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>

        /// 上傳多個(gè)文件

        /// </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

    }

}

每一個(gè)FTP文件或文件夾,由一個(gè)自定義用戶控件【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 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 91麻豆精品国产自 | 国产精品v毛片免费看观看 国产精品v欧美 | 高潮毛片无遮挡高清视频播放 | 国产成人无码午夜视频在线观 | 国产毛片a级久久久不卡精品 | 白丝护士高潮喷水免费网站 | 国产极品美女一区二区三区 | 国产欧美日韩视频一区二区三区 | 国产精品无码一区二区三区不 | 国产精品99无码一区二区 | 91九色老熟女免费 | 成av人天堂无码 | 国产无码少妇影视 | 国产精品国产对白熟妇 | 国产欧美另类久久久品 | 福利一区二区三区在线视频 | 国产对白91色拍 | 国产高清国际精品福利色噜噜 | 韩国精品久久久久久无码 | 国产秘麻豆果冻传媒 | 国产午夜精品1区2区3福利 | 成人精品久久一区二 | 国产欧美综合在线观看第十页 | 精品国产一区二区三区四区不 | 国产精品日本欧美一区二区 | 高清无码国产片 | 国产肥妇无码精品视频 | 国产成人无码视频一区二区三 | 91尤物在线一区二区三区 | 国产丝袜美 | 丰满白嫩尤物一区二区 | 国产精品视频一区二区 | 国产精品一区二区公司 | 成人无码在线视频网 | 国产爆乳美女娇喘呻 | 国产天堂一区二区三区 | 岛国av无码免费无禁网站麦芽 | 国产无码一区二区三区不卡视频 | 91热国产在线观看 | 国产白领诱惑在线观看 | 国产毛片毛多水多 |