基于ESFramework的FTP服务 —— ESFramework扩展之EsfFTP

   
   ESFramework体系的目标之一就是帮助快速构建IM与业务相结合的系统,在我们的业务应用中,经常会遇到类似这样的需求:商家或服务商需要提供一些资料(文档、影片宣传资料等)给他的用户,他希望用户能方便地下载这些资料,另外,用户也可以直接上传自己的文件到服务器供商家检阅。这种功能就像我们常用的FTP软件的功能一样,在这里,它通常可以直接集成到企业的业务应用中。

   EsfFTP是一个实现了Ftp功能的ESFramework扩展,它支持如下功能:
(1)下载文件
(2)上传文件
(3)删除服务器上的文件
(4)权限控制(Ftp可访问性控制)

   客户端通过IFtpOutter接口与服务器进行有关Ftp的交互。
      

   由于Ftp功能主要是文件的上传下载功能,所以IFtpOutter从IGeneralFileOutter接口继承,IGeneralFileOutter接口也被EsfIMCore扩展使用,以用于在用户之间进行P2P的文件传递。
   IFtpOutter.GetFtpDirectory()方法用于获取服务器的FTP目录,下图是一个获取FTP目录列表的截图:
      

   调用IFtpOutter.UploadFile()和IFtpOutter.DownloadFile()方法可以进行文件上传和下载。IFtpOutter.RemoveFile()方法用于删除服务器上的文件。
   这些方法都返回FtpAccessResult枚举值:

    [EnumDescription("进行ftp操作的结果")]
    public enum FtpAccessResult
    {
        [EnumDescription("OK")]
        OK ,
        [EnumDescription("没有权限")]
        NoPermission  ,
        [EnumDescription("下载的目标文件不存在")]
        FileNotExist ,  //For Download
        [EnumDescription("上传的文件已经存在")]
        FileHasExisted //For Upload
    }

   这个结果是由服务端返回的,如果是删除文件,则服务端在返回FtpAccessResult.OK之前就已经成功删除了文件。如果是上传或下载文件,则在返回FtpAccessResult.OK之前就已经开始文件传输了。
   下图是进行文件下载和上传的截图:

   IFtpOutter扩展在实现的过程中,解决了几个小问题:
(1)如果多个用户同时下载同一个文件,这时服务端打开文件的方式必须是以“共享、读”的方式打开,否则,将无法对文件进行并行访问。像下面这样以“共享、读”的方式打开文件:

FileStream fs = new FileStream(filePath, FileMode.Open ,FileAccess.Read ,FileShare.Read);    

(2)效率!当有很多用户在下载上传文件时,如何保证服务器的效率。
   文件传递非常影响服务器的效率,起主要决定作用的是两个因素,一是每个文件包(FilePackage)的大小,而是两个文件包之间的发送间隔时间的大小。我曾试过,如果间隔时间为0ms,那么当仅仅几个用户下载文件时,服务端的Cpu利用率就是90%-100%。当我把间隔时间设为20ms,同等情况下服务器Cpu利用率为3%-5%,这就正常了。同样FilePackage的大小取值,是1k?还是100k?对效率的影响都是非常大的。至于间隔时间和FilePackage的大小取值到底为多少,需要根据我们的应用环境和网络环境来决定。EsfFTP提供的默认值是:时间间隔为20ms,FilePackage大小为10k。

   在ESFramework V1.0 高级演示(0915)中,提供了FTP演示功能,需要试用的朋友可以从ESFramework体系 (序) “下载”部分下载用用看。
   下载解压后,打开ApplicationServerSystem文件夹(服务端程序)下的ApplicationServerSystem.exe.config文件,找到"ftpManager"的配置,将FtpDirectoryPath属性的值修改为你要开放的Ftp目录,然后运行即可。

      
   转到:ESFramework体系 (序)

 

时间: 2024-09-27 09:56:06

基于ESFramework的FTP服务 —— ESFramework扩展之EsfFTP的相关文章

用Windows IIS和阿里云NAS提供Web和FTP服务

阿里云文件存储服务NAS(阿里云NAS)是阿里云在2016年正式推出的公有云上的网络文件系统实现.阿里云NAS主要面向阿里云 ECS 实例.HPC.Docker.弹性Web和BatchCompute 等计算节点提供文件存储服务.通过标准的文件访问协议,用户无需对现有应用做任何修改,即可在云上使用具备无限容量及性能扩展.单一命名空间.多共享.高可靠和高可用等特性的分布式文件系统.阿里云于2016年发布了支持NFS网络文件系统访问协议的阿里云文件系统(NAS).2017年3月,又增加了SMB文件系统

基于 CentOS 搭建 FTP 文件服务

本文测试环境 1.Centos 7 2.测试服务器IP 192.168.1.170 1.安装并启动 FTP 服务 1.1 安装 VSFTPD 使用 yum 安装 vsftpd yum install -y vsftpd 1.2 启动 VSFTPD 安装完成后,启动 FTP 服务: service vsftpd start 启动后,可以看到系统已经监听了 21 端口: netstat -nltp | grep 21 此时,访问 ftp://192.168.1.170 可浏览机器上的 /var/ft

基于UNIX平台FTP服务器的建立

目前很多企业单位正在构架自己的Intranet,FTP服务器是其中的一个服务支持,有很多单位购置了基于UNIX平台的计算机,为了在网上能够提供FTP服务支持,专门购置基于UNIX平台的FTP Server软件,其实在基于UNIX平台的计算机系统中,采取一定的技术方法,就可以建立自己的FTP Server,实现网上文件上下载服务,无须再购置专门的软件,和乐而不为之呢?下面就其建立过程阐述如下: 1.确定FTP Server的共享目录 为FTP Server建立一个FTP工作目录,在此设定为/hom

基于Spring-DM实现分布式服务框架(DSF)(一)

经过上篇分析分布式服务框架的blog后,正式对之前的基于OSGi实现分布式服务框架的系列改名(顺便把分布式服务框架改为使用DSF缩写),因为已经决定基于Spring-DM来实现,为什么呢,而且为什么一定要是Spring-DM,而不直接说Spring呢? 今天是Spring-DM 1.0 release的大好日子,,不容易呀,做了这么久,具体怎么样还没来得及细看,不过之前有用过1.0 m2,已经觉得很不错了,相信1.0 release更不会失望. 在我眼里看来,Spring是个很大的东西,其实DS

DockOne微信分享(九十六):爱油科技基于SpringCloud的微服务实践

本文讲的是DockOne微信分享(九十六):爱油科技基于SpringCloud的微服务实践[编者的话]本次分享主要介绍了爱油科技基于Docker和Spring Cloud将整体业务微服务化的一些实践经验,主要包括: 微服务架构的分层和框架选型 服务发现和配置管理 服务集成和服务质量保证 基于领域驱动设计 实施DevOps 从单体应用到微服务 单体应用 对于单体应用来说,优点很多,例如: 小而美,结构简单易于开发实现 部署门槛低,单个Jar包或者网站打包即可部署 可快速实现多实例部署 然而随着业务

云服务器ECS下的FTP服务的安装配置与使用

简介 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application).基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件. 互联网上提供文件存储和访问服务的计算机,他们依照的是FTP协议提供服务!支持FTP协议的服务器就是FTP服务器!FTP协议提供存储和传输服务的一套协议. 下载"(Download)

阿里沈询:阿里技术架构演变,及基于EDAS的敏捷服务开发与架构实践

8月30-31日20:00-21:30,一场别开生面的技术大会-- "蚂蚁金服&阿里云在线金融技术峰会"将在线举办.本次将聚焦数据库.应用架构.移动开发.机器学习等热门领域,帮助金融业技术开发者深入解析互联网应用的前沿应用与技术实践. 蚂蚁金服&阿里云在线金融技术峰会专题:https://yq.aliyun.com/activity/109 峰会统一报名链接:http://yq.aliyun.com/webinar/join/38 来自阿里巴巴的资深专家王晶昱(花名:沈

如何规划基于Docker的微服务?

用微服务器替代整体应用程序,或者建立新的应用程序,是开发团队日益增长的考虑因素,这些开发团队希望提高敏捷性,迭代速度更快,并跟上市场变化.通过在不同团队之间提供更大的自主权,允许他们并行工作,在更短的时间内实现更多的功能,微服务器提供的代码不那么脆弱,从而更容易进行更改,测试和更新. Docker容器适合微服务,因为它们具有自主性,自动化和便携性.具体来说,Docker以其封装特定应用程序组件及其所有依赖关系的能力而闻名,从而使团队能够独立工作,而无需底层基础架构或底层基础来支持其正在使用的每一

Linux安装FTP服务

ftp服务器 1.  在Linux和其他机器之间共享文件(在linux下安装ftp) 2.  具体安装步骤: a) 首先查看我的Redhat5上是否已经安装 rpm -qa|grep vsftpd b) 查看服务的运行状态: Service iptables status c) 安装. 如果没有安装话,就要选择一种方式安装 i. 可以到官方网站去下载 也可以用光盘安装,RedHat 5的安盘里自带的,所以我选择光盘安装 ii.   (1)先把光盘                  挂载到系统上: