溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

在附件管理模塊中增加對(duì)FTP上傳和預(yù)覽支持的方法是什么

發(fā)布時(shí)間:2020-08-31 14:19:02 來源:億速云 閱讀:202 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關(guān)在附件管理模塊中增加對(duì)FTP上傳和預(yù)覽支持的方法是什么的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過來看看吧。

1、FTP上傳、HTTP文件預(yù)覽實(shí)現(xiàn)思路

我們?cè)O(shè)想的附件管理,底層都是需要在Winform、Web等開發(fā)項(xiàng)目上重用的,因此底層的設(shè)計(jì)需要考慮好對(duì)應(yīng)的處理,另外后面可以利用WInform的HTML編輯控件、或者Web的HTML編輯控件進(jìn)行集成,附件則是統(tǒng)一在一個(gè)組件里面實(shí)現(xiàn)的。

借助FTP的文件上傳,我們單機(jī)版本或者基于局域網(wǎng)的Winform界面程序,也可以單獨(dú)構(gòu)建一個(gè)FTP服務(wù)器,實(shí)現(xiàn)文件的共享;而分布式的混合式開發(fā)框架中,對(duì)于文件的上傳,可以選擇基于服務(wù)的文件系統(tǒng)寫入,同時(shí)也可以基于FTP的方式上傳。

基于混合式框架的FTP方式上傳文件,其邏輯關(guān)系如下所示。

在附件管理模塊中增加對(duì)FTP上傳和預(yù)覽支持的方法是什么

這樣文件通過FTP方式上傳的文件系統(tǒng)后,我們?cè)谖募到y(tǒng)里面搭建一個(gè)HTTP服務(wù),這樣對(duì)應(yīng)上的HTTP地址就可以實(shí)現(xiàn)文件的下載,以及圖片的查看等操作了(可以在HTML編輯器中實(shí)現(xiàn))。

2、引入FTP組件實(shí)現(xiàn)文件上傳

使用FTP上傳,雖然在自己的公用類庫里面有FTPHelper類可以使用,不過相對(duì)來說,我更愿意引入更為完善強(qiáng)大的FTP開源組件進(jìn)行相關(guān)的處理,這里我們使用FluentFTP這個(gè)組件(GitHub地址: ),這個(gè)是一個(gè)應(yīng)用很廣,功能很強(qiáng)大的FTP組件。

FluentFTP是一款老外開發(fā)的基于.Net的支持FTP及的FTPS 的FTP類庫,F(xiàn)luentFTP是完全托管的FTP客戶端,被設(shè)計(jì)為易于使用和易于擴(kuò)展。它支持文件和目錄列表,上傳和下載文件和SSL / TLS連接。它可以連接到Unix和Windows IIS建立FTP服務(wù)器。這個(gè)項(xiàng)目是完全開發(fā)托管C #。

這個(gè)組件的使用代碼,這里粘貼一下,以便總體有一個(gè)直觀的了解吧。

// create an FTP clientFtpClient client = new FtpClient("123.123.123.123");// if you don't specify login credentials, we use the "anonymous" user accountclient.Credentials = new NetworkCredential("david", "pass123");// begin connecting to the serverclient.Connect();// get a list of files and directories in the "/htdocs" folderforeach (FtpListItem item in client.GetListing("/htdocs")) {    // if this is a fileif (item.Type == FtpFileSystemObjectType.File){        // get the file sizelong 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 fileclient.UploadFile(@"C:\MyVideo.mp4", "/htdocs/big.txt");// rename the uploaded fileclient.Rename("/htdocs/big.txt", "/htdocs/big2.txt");// download the file againclient.DownloadFile(@"C:\MyVideo_2.mp4", "/htdocs/big2.txt");// delete the fileclient.DeleteFile("/htdocs/big2.txt");// delete a folder recursivelyclient.DeleteDirectory("/htdocs/extras/");// check if a file existsif (client.FileExists("/htdocs/big2.txt")){ }// check if a folder existsif (client.DirectoryExists("/htdocs/extras/")){ }// upload a file and retry 3 times before giving upclient.RetryAttempts = 3;
client.UploadFile(@"C:\MyVideo.mp4", "/htdocs/big.txt", FtpExists.Overwrite, false, FtpVerify.Retry);// disconnect! good bye!client.Disconnect();

有了這些了解,我們?cè)谄胀╓inform程序或者混合式框架的的程序中,我們通過配置指定FTP的相關(guān)信息,就可以在代碼里面加載這些信息,進(jìn)行FTP的登陸、文件上傳、下載等操作了。

3、附件管理模塊實(shí)現(xiàn)

有了上面的思路和組件的輔助,我們對(duì)原來的附件管理模塊進(jìn)行相關(guān)的升級(jí)處理即可實(shí)現(xiàn)FTP上傳模式的處理了。

首先為了方便,我們先定義一個(gè)獲取FTP服務(wù)器、用戶名、密碼等參數(shù)的配置實(shí)體類,如下所示。

    /// <summary>/// FTP配置信息/// </summary>    [DataContract]
    [Serializable]public class FTPInfo
    {/// <summary>/// 默認(rèn)構(gòu)造函數(shù)/// </summary>public FTPInfo()
        {

        }/// <summary>/// 參數(shù)化構(gòu)造函數(shù)/// </summary>/// <param name="server"></param>/// <param name="user"></param>/// <param name="password"></param>public FTPInfo(string server, string user, string password, string baseUrl)
        {this.Server = server;this.User = user;this.Password = password;this.BaseUrl = baseUrl;
        }/// <summary>/// FTP服務(wù)地址/// </summary>        [DataMember]public string Server { get; set; }/// <summary>/// FTP用戶名/// </summary>        [DataMember]public string User { get; set; }/// <summary>/// FTP密碼/// </summary>        [DataMember]public string Password { get; set; }/// <summary>/// FTP的基礎(chǔ)路徑,如可以指定為IIS的路徑::8000 ,方便下載打開/// </summary>        [DataMember]public string BaseUrl { get; set; }
    }

定義一個(gè)函數(shù),專門用來提取配置文件里面的相關(guān)FTP參數(shù)的,如下所示。

        /// <summary>/// 獲取配置的FTP配置參數(shù)/// </summary>/// <returns></returns>private FTPInfo GetFTPConfig()
        {var ftp_server = config.AppConfigGet("ftp_server");var ftp_user = config.AppConfigGet("ftp_user");var ftp_pass = config.AppConfigGet("ftp_password");var ftp_baseurl = config.AppConfigGet("ftp_baseurl");return new FTPInfo(ftp_server, ftp_user, ftp_pass, ftp_baseurl);
        }

其中我們的配置文件如下所示。

在附件管理模塊中增加對(duì)FTP上傳和預(yù)覽支持的方法是什么

使用FluentFTP的組件代碼如下所示。

//使用FluentFTP操作FTP文件FtpClient client = new FtpClient(ftpInfo.Server, ftpInfo.User, ftpInfo.Password);

然后調(diào)用FTP組件對(duì)目錄進(jìn)行判斷,無則創(chuàng)建一個(gè)即可。

//確定日期時(shí)間目錄(格式:yyyy-MM),不存在則創(chuàng)建string savePath = string.Format("/{0}-{1:D2}/{2}", DateTime.Now.Year, DateTime.Now.Month, category);bool isExistDir = client.DirectoryExists(savePath);if(!isExistDir)
{
    client.CreateDirectory(savePath);
}

最后使用組件上傳文件即可,這里上傳文件,由于前面FileUploadInfo實(shí)體類里面存儲(chǔ)的是字節(jié)數(shù)組,因此也是采用FTP組件直接上傳字節(jié)數(shù)組即可。

//使用FTP上傳文件//避免文件重復(fù),使用GUID命名var ext = FileUtil.GetExtension(info.FileName);var newFileName = string.Format("{0}{1}", Guid.NewGuid().ToString(), ext);//FileUtil.GetFileName(file);savePath = savePath.UriCombine(newFileName);bool uploaded = client.Upload(info.FileData, savePath, FtpExists.Overwrite, true);

文件上傳到文件服務(wù)器后,剩下的就是把相關(guān)的信息存儲(chǔ)到附件管理模塊的數(shù)據(jù)表里面即可,這樣可以在使用的時(shí)候,直接使用數(shù)據(jù)庫里面的信息,如果是需要查看圖片或者下載文件,那么拼接好相關(guān)的HTTP地址即可,我們來看看對(duì)應(yīng)的數(shù)據(jù)庫記錄截圖如下所示。

在附件管理模塊中增加對(duì)FTP上傳和預(yù)覽支持的方法是什么

有了這些基礎(chǔ)信息,我們可以同時(shí)改造我之前介紹過的Winform之HTML編輯控件:ZetaHtmlEditControl了(分享一個(gè)Winform里面的HTML編輯控件Zeta HTML Edit Control,漢化附源碼),我對(duì)這個(gè)控件所有英文的菜單、工具欄、對(duì)話框、提示內(nèi)容等資源進(jìn)行中文化后,并在工具欄中增加插入圖片、打印功能后,界面如下所示。

在附件管理模塊中增加對(duì)FTP上傳和預(yù)覽支持的方法是什么

默認(rèn)情況下,我們加入圖片的方式,肯定還是基于本地文件的方式了;但是經(jīng)過我們改造使用FTP上傳文件方式后,在控件上獲得HTTP地址,就可以對(duì)圖片文件進(jìn)行預(yù)覽展示的操作了。

這種方法構(gòu)造的圖片地址,屬于標(biāo)準(zhǔn)的URL地址,可以在各個(gè)地方進(jìn)行查看的,如下界面所示。

在附件管理模塊中增加對(duì)FTP上傳和預(yù)覽支持的方法是什么

這個(gè)就是ZetaHtmlEditControl控件,整合我們前面已經(jīng)完成了FTP上傳模式的附件管理模塊,實(shí)現(xiàn)編輯在線HTML的功能,這樣的HTML內(nèi)容,同樣可以適合在Web界面下的HTML編輯器上進(jìn)行展示了。

感謝各位的閱讀!關(guān)于在附件管理模塊中增加對(duì)FTP上傳和預(yù)覽支持的方法是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

ftp
AI