当前位置: 首页 > 科技观察

C#如何在Windows下操作IIS架设FTP服务器

时间:2023-03-12 00:06:39 科技观察

本文转载自微信公众号《后端Q》,作者柯南。转载请联系后台Q公众号。什么是FTPFTP(FileTransferProtocol)是一种在TCP/IP网络上的两台计算机之间传输文件的协议,使文件可以在主机之间共享。Internet信息服务(IIS)可以配置为作为FTP服务器运行。这允许其他计算机连接到服务器并将文件复制到服务器或从服务器复制文件。例如,如果您在自己的计算机上托管一个网站并希望允许远程用户连接到您的计算机并将他们的文件复制到服务器,您可以将IIS配置为充当FTP服务器。下面主要讲解主要实现方法,在Window的IIS中创建一个FTP站点。1.创建站点publicintcreateFtpSite(stringftpname,stringpath){terrorCode=ErrorCode.Succeed;if(ftpname==""&&path=""){try{ServerManageriisManager=newServerManager();Configurationcfg=iisManager.GetApplicationHostConfiguration();/*----停止端口21----*/try{/*----sites----*/foreach(varftpsiteiniisManager.Sites){/**站点描述*/stringsitename=ftpsite.Name;/**站点绑定域名和端口*/foreach(Bindingbindinginftpsite.Bindings){try{stringcurrentServerBindings=binding.GetAttributeValue("BindingInformation").ToString();stringport=currentServerBindings.Split(":".ToArray())[1];if(port=="21"){try{//stopsiteftpsite.Stop();}catch{//doingnothing}break;}}catch{//doingnothing}}}//提交更改iisManager.CommitChanges();}catch{//donothing}/**创建FTP*/if(!System.IO.Directory.Exists(System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath")))//创建站点路径{System.IO.Directory.CreateDirectory(System.Configuration.ConfigurationManager。AppSettings.Get("defaultftpath"));}Sitesite=iisManager.Sites.Add(System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp"),"ftp",string.Format("*:{0}:""21"),System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath"));iisManager.CommitChanges();//设置FTPSSL权限SetFtpSSL();//设置FTPEveryone权限IISUtil.IISCore.AddSiteUtiladdsiteUtil=newAddSiteUtil();try{stringconfig_rootpath=System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath");//stringrootpath=path.Substring(0,path.IndexOf(ftpname)-1)+"\\ftproot";if(!System.IO.Directory.Exists(config_rootpath)){System.IO.Directory.CreateDirectory(config_rootpath);}addsiteUtil.icaclsSet("Everyone",System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath"));/*----隐藏----*/System.IO.File.SetAttributes(config_rootpath,System.IO.FileAttributes.Hidden);}catch{}}catch{errorCode=ErrorCode.ftpSiteFail;}}else{if(!getFtpState(ftpname))//判断ftp用户是否存在{/*----FTP状态检查----*/FtpStateInit();try{使用(ServerManageriisManager=newServerManager()){Sitesite=iisManager.Sites.FirstOrDefault(o=>((string)o["name"]).Contains(System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp")));varvird=site.Applications[0].VirtualDirectories["/"+ftpname];if(vird==null){site.Applications[0].VirtualDirectories.Add("/"+ftpname,path);}else{errorCode=ErrorCode.ftpExists;}iisManager.CommitChanges();//添加FTP访问权限SetFtpAccess(ftpname);}}catch{errorCode=ErrorCode.ftpSiteFail;}}else{errorCode=ErrorCode.ftpExists;}}returnerrorCode;}2、站点列表///

///iis6获取所有ftp站点信息/////////publicstaticListiGetFtpInfos(){Listftpinfos=newList();try{stringftproot=Ssystem.Configuration.ConfigurationManager.AppSettings.Get("defaultftp");stringftpname="";//用户名stringftppass="";//密码stringftppath="";//物理路径stringiisversion="";//iis版本stringmajorversion=IISCore.IISInfoUtil.SGetIISMajorVersion();if(majorversion==""){iisversion="unknown";}else{iisversion=majorversion.ToString();}/**创建FTP子站点*/varsiteEntry=newDirectoryEntry("IIS://localhost/MSFTPSVC");//IIS6管理对象EqualsEx("IIsFtpServer"))//IIsFtpServer代表FTPcontinue;stringyftpname=sitechild.Properties["ServerComment"].Value.ToString();stringdefaultftpname=System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp");if(yftpname==defaultftpname){try{//获取站点信息varroot=sitechild.Children.Find("ROOT","IIsFtpVirtualDir");DirectoryEntriesftps=root.Children;foreach(DirectoryEntryftpinftps){ftpname=ftp.Name;/**获取密码*/try{/**沿环站点获取站点信息*/foreach(DirectoryEntrychildinrootentry.儿童){if(child.SchemaClassName=="IIsWebServer"&&child.Properties["ServerComment"].Value.ToString()==ftpname){ftppass=child.Properties["AnonymousUserPass"].Value.ToString();/**获取站点目录*/foreach(DirectoryEntryrootChildinchild.Children){stringname=rootChild.Name.ToString();if((rootChild.SchemaClassName=="IIsWebVirtualDir")&&(rootChild.Name.ToString().ToLower()=="root")){if(rootChild.Properties["Path"].Value==null){ftppath="";}else{ftppath=rootChild.Properties["Path"].Value.ToString().Substring(0,rootChild.Properties["Path"].Value.ToString().LastIndexOf("\\"));}}}}}}catch{}/**获取路径*/if(ftpname!="")ftpinfos.Add(ftproot+"-@-"+ftpname+"-@-"+ftppass+"-@-"+ftppath+"-@-"+iisversion);//添加站点信息}}catch{}}}}catch{}returnftpinfos;//返回数据}3、删除站点publicstaticboolDeleteQFtp(stringftpname){boolflag=false;try{/**删除FTP子站点*/varsiteEntry=newDirectoryEntry("IIS://localhost/MSFTPSVC");//IIS6管理对象if(ftpname!=""){foreach(DirectoryEntrysitechildinsiteEntry.Children){if(!sitechild.SchemaClassName.EqualsEx("IIsFtpServer"))//IIsFtpServer代表FTPcontinue;stringyftpname=sitechild.Properties["ServerComment"].Value.ToString();if(yftpname.ToLower()==System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp").ToLower()){try{DirectoryEntryroot=sitechild.Children.Find("ROOT","IIsFtpVirtualDir");varftpchild=root.Children.Find(ftpname,"IIsFtpVirtualDir");if(ftpchild!=null){//删除root.Children.Remove(ftpchild);root.CommitChanges();sitechild.CommitChanges();siteEntry.CommitChanges();flag=true;}}catch{flag=false;}}}}}catch{}returnflag;}