1、FTP上传、HTTP文件预览完成思绪
我们想象的附件治理,底层都是须要在Winform、Web等开辟项目上重用的,因而底层的设想须要斟酌好对应的处置惩罚,别的背面能够应用WInform的HTML编辑控件、或许Web的HTML编辑控件举行集成,附件则是统一在一个组件内里完成的。
借助FTP的文件上传,我们单机版本或许基于局域网的Winform界面顺序,也能够零丁构建一个FTP效劳器,完成文件的同享;而分布式的混合式开辟框架中,关于文件的上传,能够挑选基于效劳的文件体系写入,同时也能够基于FTP的体式格局上传。
基于混合式框架的FTP体式格局上传文件,其逻辑关系以下所示。
如许文件经由过程FTP体式格局上传的文件体系后,我们在文件体系内里搭建一个HTTP效劳,如许对应上的HTTP地点就能够完成文件的下载,以及图片的检察等操纵了(能够在HTML编辑器中完成)。
2、引入FTP组件完成文件上传
运用FTP上传,虽然在本身的公用类库内里有FTPHelper类能够运用,不过相对来说,我更情愿引入更加完美壮大的FTP开源组件举行相干的处置惩罚,这里我们运用FluentFTP这个组件(GitHub地点: ),这个是一个运用很广,功用很壮大的FTP组件。
FluentFTP是一款老外开辟的基于.Net的支撑FTP及的FTPS 的FTP类库,FluentFTP是完整托管的FTP客户端,被设想为易于运用和易于扩大。它支撑文件和目次列表,上传和下载文件和SSL / TLS衔接。它能够衔接到Unix和Windows IIS竖立FTP效劳器。这个项目是完整开辟托管C #。
这个组件的运用代码,这里粘贴一下,以便整体有一个直观的相识吧。
// 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();
有了这些相识,我们在一般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的途径::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); }
个中我们的设置文件以下所示。
运用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地点即可,我们来看看对应的数据库纪录截图以下所示。
有了这些基本信息,我们能够同时革新我之前引见过的Winform之HTML编辑控件:ZetaHtmlEditControl了(分享一个Winform内里的HTML编辑控件Zeta HTML Edit Control,汉化附源码),我对这个控件一切英文的菜单、工具栏、对话框、提醒内容等资本举行中文化后,并在工具栏中增添插进去图片、打印功用后,界面以下所示。
默许情况下,我们到场图片的体式格局,一定照样基于当地文件的体式格局了;然则经由我们革新运用FTP上传文件体式格局后,在控件上取得HTTP地点,就能够对图片文件举行预览展现的操纵了。
这类要领组织的图片地点,属于规范的URL地点,能够在各个地方举行检察的,以下界面所示。
这个就是ZetaHtmlEditControl控件,整合我们前面已完成了FTP上传形式的附件治理模块,完成编辑在线HTML的功用,如许的HTML内容,一样能够合适在Web界面下的HTML编辑器上举行展现了。
以上就是我为全部WInform开辟框架组织的项目组件,增添的FTP上传体式格局,同时完美了对应的场景需求,在ZetaHtmlEditControl控件上完成编辑在线HTML的功用,愿望开辟的思绪对您有所增益。
以上就是如安在附件治理模块中增添对FTP 上传和预览的支撑?的细致内容,更多请关注ki4网别的相干文章!