贯彻了附属类小构件文件和著录的组成管理

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);
        }

内部大家的布局文件如下所示。

图片 1

接受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地址就可以,大家来造访对应的数据库记录截图如下所示。

图片 2

有了这几个底工音讯,大家能够並且更换自己后面介绍过的Winform之HTML编辑控件:ZetaHtmlEditControl了(享用多个Winform里面包车型地铁HTML编辑控件Zeta
HTML Edit
Control,汉化附源码
卡塔尔,作者对这一个控件全数印度语印尼语的菜系、工具栏、对话框、提醒内容等财富开展中文化后,并在工具栏中加进插入图片、打字与印刷功效后,分界面如下所示。

图片 3

暗中同意意况下,大家投入图片的主意,肯定依旧依照当和姑件的秘籍了;不过经过我们改动使用FTP上传文件措施后,在控件上赢得HTTP地址,就足以对图纸文件实行预览呈现的操作了。

这种方法协会的图形地址,归于规范的UEscortL地址,能够在各样地方进行查看的,如下分界面所示。

图片 4

以此就是ZetaHtmlEditControl控件,整合大家前面早就到位了FTP上传方式的附属类小零器件处理模块,完结编辑在线HTML的意义,那样的HTML内容,同样能够相符在Web分界面下的HTML编辑器上举办展现了。

上述正是本人为后生可畏体WInform开辟框架结构的品种组件,扩张的FTP上传方式,同一时候完善了相应的场景要求,在ZetaHtmlEditControl控件上实现编辑在线HTML的功力,希望开荒的思绪对你有所增益。

 

2、引进FTP组件完毕文件上传

 使用FTP上传,即便在温馨的公用类Curry面有FTPHelper类能够应用,然而相对来讲,笔者更乐于引进更为全面强盛的FTP开源组件实行相关的管理,这里大家运用FluentFTP那些组件(GitHub地址:https://github.com/hgupta9/FluentFTP
卡塔 尔(英语:State of Qatar),那些是一个用到很广,成效很强大的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的登录、文件上传、下载等操作了。

 

1、FTP上传、HTTP文件预览完结思路

我们着想的附属类小构件管理,底层都以供给在Winform、Web等支出品种上海重机厂用的,由此底层的安插性供给思量好相应的处理,其余前边能够行使WInform的HTML编辑控件、恐怕Web的HTML编辑控件实行集成,附件则是联合在三个零部件里面完毕的。

依靠于FTP的文本上传,大家单机版本大概依靠局域网的Winform分界面程序,也得以独立创设贰个FTP服务器,完结文件的分享;而分布式的混合式开辟框架中,对于文本的上传,能够采取基于服务的文件系统写入,同期也足以依靠FTP的方法上传。

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

 图片 5

如此文件通过FTP格局上传的文件系统后,大家在文件系统里面搭建一个HTTP服务,这样对应上的HTTP地址就能够完结公文的下载,以致图片的查看等操作了(可以在HTML编辑器中达成卡塔 尔(阿拉伯语:قطر‎。

 

在前边介绍的附件管理模块里面《Winform开拓框架之通用附属类小零器件管理模块》以及《Winform开拓框架之附属类小零器件管理应用》,介绍了附件的保管功能,通过对数据库记录的拍卖和文件的管理,达成了附属类小零器件文件和著录的三结合处理,能够利用在单机版的WInform框架,也能够利用在分布式的混合式开拓框架中,随着某个付出情状的拉长,大家要求以FTP方式上传文件,因而对那几个附属类小零件管理模块实行扩张,以便相符越多的莫过于项目必要。

相关文章