Winform开垦框架之通用附属类小零件管理模块

在事先介绍的附属类小构件管理模块里面《Winform开采框架之通用附属类小构件管理模块》以及《Winform开拓框架之附属类小零件管理接受》,介绍了附属类小零部件的田管成效,通过对数据库记录的拍卖和文书的军事管制,实现了附属类小零部件文件和笔录的三结合管理,能够利用在单机版的WInform框架,也能够接纳在分布式的混合式开荒框架中,随着部分开销情况的增加,大家须求以FTP情势上传文件,因而对那个附属类小零器件管理模块实行扩大,以便相符越来越多的实在项目要求。

1、FTP上传、HTTP文件预览实现思路

大家着想的附属类小零件管理,底层都以急需在Winform、Web等费用品种上海重机厂用的,由此底层的规划必要思量好相应的管理,其它前边能够接纳WInform的HTML编辑控件、大概Web的HTML编辑控件实行归并,附属类小零器件则是联合在一个构件里面达成的。

借助FTP的公文上传,大家单机版本大概依照局域网的Winform分界面程序,也足以独立创设多少个FTP服务器,达成公文的分享;而布满式的混合式开垦框架中,对于文本的上传,可以接收基于服务的文件系统写入,同时也足以依照FTP的法子上传。

依据混合式框架的FTP格局上传文件,其逻辑关系如下所示。

 365体育网投 1

那般文件通过FTP格局上传的文件系统后,大家在文件系统里面搭建二个HTTP服务,这样对应上的HTTP地址就足以兑现文件的下载,以至图片的查阅等操作了(可以在HTML编辑器中完毕卡塔尔。

 

2、引进FTP组件达成公文上传

 使用FTP上传,即使在谐和的公用类Curry面有FTPHelper类能够动用,不过相对来讲,作者更愿意引进更为完备强盛的FTP开源组件进行连锁的拍卖,这里我们利用FluentFTP这一个组件(GitHub地址:https://github.com/hgupta9/FluentFTP
卡塔尔国,那一个是叁个施用很广,效用很刚劲的FTP组件。

FluentFTP是意气风发款老外开荒的基于.Net的支撑FTP及的FTPS
的FTP类库,FluentFTP是一心托管的FTP顾客端,被规划为便于使用和轻便扩充。它帮助文件和目录列表,上传和下载文件和SSL
/ TLS连接。它能够接连不断到Unix和Windows
IIS创设FTP服务器。那些连串是一丝一毫开荒托管C #。

这么些组件的运用代码,这里粘贴一下,以便总体有二个直观的垂询吗。

// 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" folder
foreach (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 folder
    DateTime 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();

有了那么些精晓,咱们在平凡Winform程序仍然混合式框架的的次序中,大家通过安排钦命FTP的相干消息,就足以在代码里面加载那些新闻,实行FTP的登录、文件上传、下载等操作了。

 

3、附属类小构件管理模块完成

365体育网投,有了地方的思路和组件的扶持,大家对原本的附属类小零器件管理模块实行连锁的进级管理就能够完结FTP上传情势的拍卖了。

先是为了便利,大家先定义三个获取FTP服务器、顾客名、密码等参数的布置实体类,如下所示。

    /// <summary>
    /// FTP配置信息
    /// </summary>
    [DataContract]
    [Serializable]
    public class FTPInfo
    {
        /// <summary>
        /// 默认构造函数
        /// </summary>
        public FTPInfo()
        {

        }

        /// <summary>
        /// 参数化构造函数
        /// </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服务地址
        /// </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的基础路径,如可以指定为IIS的路径:http://www.iqidi.com:8000 ,方便下载打开
        /// </summary>
        [DataMember]
        public string BaseUrl { get; set; }
    }

概念四个函数,专门用来提取配置文件之中的有关FTP参数的,如下所示。

        /// <summary>
        /// 获取配置的FTP配置参数
        /// </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);
        }

其间大家的布局文件如下所示。

365体育网投 2

接纳FluentFTP的构件代码如下所示。

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

下一场调用FTP组件对目录举行判别,无则创建三个就能够。

//确定日期时间目录(格式:yyyy-MM),不存在则创建
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实体类里面积累的是字节数组,因而也是使用FTP组件直接上传字节数组就可以。

//使用FTP上传文件
//避免文件重复,使用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);

文本上传到文件服务器后,剩下的正是把相关的音信囤积到附属类小零器件管理模块的数据表里面即可,那样能够在应用的时候,直接行使数据Curry面包车型地铁音信,假若是索要查阅图片或然下载文件,那么拼接好相关的HTTP地址就可以,我们来探访对应的数据库记录截图如下所示。

365体育网投 3

有了那个幼功消息,大家可以并且改动自个儿事先介绍过的Winform之HTML编辑控件:ZetaHtmlEditControl了(享用一个Winform里面包车型大巴HTML编辑控件Zeta
HTML Edit
Control,汉化附源码
卡塔尔,作者对这些控件全部法语的菜系、工具栏、对话框、提醒内容等能源开展中文化后,并在工具栏中加进插入图片、打字与印刷成效后,分界面如下所示。

365体育网投 4

默许意况下,我们投入图片的点子,断定依旧依据当羊眼半夏件的主意了;可是经过我们改动使用FTP上传文件措施后,在控件上拿到HTTP地址,就足以对图纸文件举行预览体现的操作了。

这种方法组织的图形地址,归于规范的U奥迪Q3L地址,能够在逐朝气蓬勃地点开展查看的,如下分界面所示。

365体育网投 5

本条正是ZetaHtmlEditControl控件,整合大家近日已经产生了FTP上传形式的附属类小构件管理模块,完结编辑在线HTML的意义,那样的HTML内容,相像能够相符在Web分界面下的HTML编辑器上进展呈现了。

以上正是本人为风度翩翩体WInform开辟架构的花色组件,扩张的FTP上传方式,同不时间康健了相应的景观须求,在ZetaHtmlEditControl控件上达成编辑在线HTML的效劳,希望开拓的思绪对你抱有增益。