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

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

   
   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体系 (序)

 

目录
相关文章
|
3月前
|
监控 Ubuntu 安全
Ubuntu开启FTP服务教程
在Ubuntu服务器上配置FTP服务是一个常见的需求,无论是用于文件分享、网站管理还是数据备份。FTP(文件传输协议)是一种用于在网络上传输文件的协议,它可以让用户通过身份验证下载或上传文件。本文将指导您如何在Ubuntu系统上安装和配置FTP服务器,以及如何管理用户权限来保证服务器的安全性。
145 0
|
4月前
|
安全 算法 网络协议
【Linux】文件服务FTP(File Transfer Protocol)
【Linux】文件服务FTP(File Transfer Protocol)
55 0
|
6天前
|
Web App开发 安全 Unix
Linux 配置FTP服务器 + vsftpd服务安装配置 (Good篇)
Linux 配置FTP服务器 + vsftpd服务安装配置 (Good篇)
|
25天前
|
Linux 网络安全 数据安全/隐私保护
FTP 文件传输服务
FTP 文件传输服务
|
1月前
|
Ubuntu 网络安全 数据安全/隐私保护
ubuntu篇-配置FTP服务,本机和docker安装
通过以上步骤,你可以在Ubuntu上配置FTP服务,无论是本机安装还是Docker内安装,都可以提供FTP文件传输服务。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
29 1
|
3月前
|
弹性计算 Ubuntu
Ubuntu 20.04安装FTP服务
以阿里云ECS为服务器,搭建FTP服务并在本机使用FileZilla连接服务。
340 2
|
5月前
|
Docker 容器
docker 安装ftp服务
docker 安装ftp服务
107 0
|
5月前
|
安全 网络协议 Linux
哇~~真的是你呀!今天是LINUX中的FTP服务
FTP(File Transfer Protocol,文件传输协议)是一种用于在计算机网络中传输文件的标准协议。它允许用户从一个计算机(称为FTP客户端)向另一个计算机(称为FTP服务器)发送和接收文件。 以下是FTP服务的一些关键特点和功能:
47 0
|
6月前
|
Linux 网络安全 开发工具
如何在linux搭建FTP服务
如何在linux搭建FTP服务
65 0
|
6月前
|
Linux
手把手教你Linux下搭建ftp服务
手把手教你Linux下搭建ftp服务
157 1