Winform开发框架之附件管理采取365体育网投,落成了附件文件和笔录的组合管理

在前头介绍的附件管理模块里面《Winform开发框架之通用附件管理模块》以及《Winform开发框架之附件管理采取》,介绍了附件的田间管理功能,通过对数据库记录的拍卖和文书的保管,达成了附件文件和记录的组成管理,可以行使在单机版的WInform框架,也足以动用在分布式的混合式开发框架中,随着部分开销情况的拉长,大家须求以FTP方式上传文件,因而对那一个附件管理模块进行增加,以便适合更加多的实在项目必要。

在前头介绍的附件管理模块里面《Winform开发框架之通用附件管理模块》以及《Winform开发框架之附件管理应用》,介绍了附件的军事管制作用,通过对数据库记录的处理和文书的保管,落成了附件文件和笔录的结缘管理,可以应用在单机版的WInform框架,也足以利用在分布式的混合式开发框架中,随着部分支出情况的足够,我们须求以FTP格局上传文件,因此对那么些附件管理模块举办扩展,以便适合越来越多的骨子里项目须要。

1、FTP上传、HTTP文件预览落成思路

我们考虑的附件管理,底层都是索要在Winform、Web等支出品种上重用的,因而底层的规划要求考虑好相应的拍卖,其余前边可以应用WInform的HTML编辑控件、或者Web的HTML编辑控件举办合并,附件则是统一在一个零部件里面完成的。

借助FTP的文件上传,大家单机版本或者依照局域网的Winform界面程序,也足以独自营造一个FTP服务器,达成文件的共享;而分布式的混合式开发框架中,对于文本的上传,可以选择基于服务的文件系统写入,同时也可以根据FTP的法门上传。

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

 365体育网投 1

那般文件通过FTP格局上传的文件系统后,我们在文件系统里面搭建一个HTTP服务,那样对应上的HTTP地址就足以兑现公文的下载,以及图片的查阅等操作了(可以在HTML编辑器中完成)。

 

1、FTP上传、HTTP文件预览达成思路

咱俩考虑的附件管理,底层都是需求在Winform、Web等支出品种上重用的,因而底层的规划须求考虑好相应的拍卖,此外前边可以选拔WInform的HTML编辑控件、或者Web的HTML编辑控件进行合并,附件则是联合在一个零件里面落成的。
依傍FTP的文书上传,我们单机版本或者依据局域网的Winform界面程序,也可以独自创设一个FTP服务器,完结文件的共享;而分布式的混合式开发框架中,对于文本的上传,可以采用基于服务的文件系统写入,同时也可以按照FTP的章程上传。
依照混合式框架的FTP格局上传文件,其逻辑关系如下所示。

365体育网投 2

如此文件通过FTP格局上传的文件系统后,大家在文件系统里面搭建一个HTTP服务,那样对应上的HTTP地址就可以已毕文件的下载,以及图片的查看等操作了(可以在HTML编辑器中落成)。

2、引入FTP组件落成公文上传

 使用FTP上传,就算在友好的公用类库里面有FTPHelper类可以利用,不过相对来说,我更愿意引入更为完善强大的FTP开源组件举行有关的拍卖,那里大家运用FluentFTP那几个组件(GitHub地址:https://github.com/hgupta9/FluentFTP
),那一个是一个利用很广,功效很有力的FTP组件。

FluentFTP是一款老外开发的基于.Net的支撑FTP及的FTPS
的FTP类库,FluentFTP是全然托管的FTP客户端,被设计为便于使用和简单扩张。它支持文件和目录列表,上传和下载文件和SSL
/ TLS连接。它可以连续到Unix和Windows
IIS建立FTP服务器。那几个种类是全然开发托管C #365体育网投,。

以此组件的拔取代码,这里粘贴一下,以便总体有一个直观的打听吗。

// 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的登陆、文件上传、下载等操作了。

 

2、引入FTP组件完成文件上传

选用FTP上传,即便在融洽的公用类库里面有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、附件管理模块完结

有了位置的思路和零部件的提携,我们对原本的附件管理模块举办有关的晋级处理即可兑现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体育网投 3

应用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);

文本上传到文件服务器后,剩下的就是把相关的音信囤积到附件管理模块的数据表里面即可,那样可以在利用的时候,直接使用数据库里面的信息,假若是亟需查阅图片或者下载文件,那么拼接好不非亲非故系的HTTP地址即可,大家来看望对应的数据库记录截图如下所示。

365体育网投 4

有了那些基础音信,大家得以而且改造自己事先介绍过的Winform之HTML编辑控件:ZetaHtmlEditControl了(分享一个Winform里面的HTML编辑控件Zeta
HTML Edit
Control,汉化附源码
),我对那一个控件所有英文的菜谱、工具栏、对话框、提示内容等资源开展中文化后,并在工具栏中加进插入图片、打印功能后,界面如下所示。

365体育网投 5

默许情状下,大家进入图片的法门,肯定照旧基于本地文件的章程了;不过通过大家改造使用FTP上传文件格局后,在控件上得到HTTP地址,就可以对图片文件进行预览浮现的操作了。

那种方法社团的图形地址,属于标准的URL地址,可以在逐一地点开展查看的,如下界面所示。

365体育网投 6

其一就是ZetaHtmlEditControl控件,整合大家前边已经已毕了FTP上传情势的附件管理模块,完成编辑在线HTML的成效,那样的HTML内容,同样可以顺应在Web界面下的HTML编辑器上举办呈现了。

如上就是本人为任何WInform开发框架结构的体系组件,伸张的FTP上传形式,同时周全了相应的现象需要,在ZetaHtmlEditControl控件上落到实处编辑在线HTML的效果,希望开发的思路对你拥有增益。

 

3、附件管理模块完成

有了地点的笔触和组件的鼎力相助,大家对本来的附件管理模块举行有关的升官处理即可完毕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体育网投 7

选择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);

文本上传到文件服务器后,剩下的就是把相关的信息囤积到附件管理模块的数据表里面即可,那样可以在使用的时候,直接选取数据库里面的信息,即使是急需查阅图片或者下载文件,那么拼接好有关的HTTP地址即可,我们来看看对应的数据库记录截图如下所示。

365体育网投 8

有了这几个基础新闻,大家可以而且改造自我前边介绍过的Winform之HTML编辑控件:ZetaHtmlEditControl了(享受一个Winform里面的HTML编辑控件Zeta
HTML Edit
Control,汉化附源码
),我对这些控件所有英文的菜系、工具栏、对话框、提醒内容等资源开展普通话化后,并在工具栏中追加插入图片、打印功效后,界面如下所示。

365体育网投 9

默许情形下,大家进入图片的章程,肯定如故根据本地文件的措施了;不过通过我们改造使用FTP上传文件措施后,在控件上获取HTTP地址,就足以对图纸文件举行预览体现的操作了。
那种措施社团的图纸地址,属于标准的URL地址,可以在一一地点开展查看的,如下界面所示。

365体育网投 10

其一就是ZetaHtmlEditControl控件,整合大家眼前已经形成了FTP上传格局的附件管理模块,完成编辑在线HTML的职能,那样的HTML内容,同样能够顺应在Web界面下的HTML编辑器上开展浮现了。
以上就是自个儿为所有WInform开发框架结构的花色组件,增加的FTP上传形式,同时周密了对应的景色需求,在ZetaHtmlEditControl控件上贯彻编辑在线HTML的法力,希望开发的笔触对您抱有增益。

相关文章