栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

在平台项目中集成Apache FtpServer

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在平台项目中集成Apache FtpServer

一、背景

        为了提升平台相关业务的下载升级速率,并且做到更好控制下载升级过程,将下载进度推送至平台项目中,则集成引入Apache FtpServer。

二、FTP介绍

        FTP 是FileTransfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序 (Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。

三、了解Apache FtpServer

Apache Ftp Server 是100%纯Java的FTP服务器软件,遵守FTP命令协议基础的前提下,它采用MINA网络框架开发,具有非常好的性能。Apache FtpServer 既可以嵌到Java应用中使用,也可以做为Windows服务或Unix/Linux Daemon单独运行。此外还提供与Spring 相集成的模块,在本案例中是通过与spring框架的融合来完成与内部平台项目的集成的。

四、集成工作前奏

(1)准备相关jar包

ftpserver-core-1.0.6.jar

ftplet-api-1.0.6.jar

mina-core-2.0.4.jar  

                                              -可到专门的jar包网站下载,通过Maven方式配置导入   

(2)jar包解读    

  ftpserver-core.jar包提供了关于FTP服务XML文件配置的结构定义ftpserver-1.0.xsd(xsd:XMLSchemasDefinition,XML结构定义),便于与spring框架的融合。  

    ftpserver-1.0.xsd文件提供了一些配置标签,有兴趣可自行探究。

五、集成工作-spring容器中配置服务(applicationFTP.xml)

(1)定义ftp server

(2)配置FTP服务地址,监听器(继承DefaultFtplet) 

(3)配置FTP用户数据管理-数据源、SQL操作逻辑

 

 

(4)在程序加载处(spring.xml)引入applicationFTP.xml,并配置FTP服务bean工厂

    

注:myFtpServerFactory是我项目中自己定义的bean工厂

(5)通过FTP服务bean工厂,启动FTP服务

 六、定义FtpServiceOperationMonitor监听的事件,继承DefaultFtple,(重写父类DefaultFtplet的一些方法)

 

七、功能扩展(平台任务升级功能)

(1)添加FTP用户

(2)计算下载进度、速度、剩余时间

(3)取消下载

(4)断点续传时的下载进度、速度、剩余时间

(1)添加FTP用户

 根据源码“ftpserver-core-1.0.6.jar”包提供的相关类和方法,自定义添加FTP用户功能方法

(2) 计算下载进度、速度、剩余时间

        首先了解到FTP下载的命令是”RETR“,从源码“ftpserver-core-1.0.6.jar”包中找到此命令类(org.apache.ftpserver.command.impl.RETR)。    

        解读RETR类,“long transSz = dataConnection.transferToClient(session.getFtpletSession(), is)”这句代码的意思就是传输到客户端,顾名思义就是“下载”,最后下载过程的实现方式便定位到org.apache.ftpserver.impl.IODataConnection类的transfer方法。

        修改transfer方法代码,实现每传输固定大小(比如0.125兆)计算一次下载进度、速度、剩余时间,并通过redis工具推送到中心平台。

 

注:这边推送计算结果到平台项目中使用的redis,redis的可靠性不高,应用可靠性更高的kafka或RocketMQ。 

 (3) 在下载开始前onDownloadStart的监听方法中加入记录当前会话的IO连接工厂:

 

提供取消下载接口:

 

 (4)断点续传时的下载进度、速度、剩余时间

在接收命令后afterCommand监听方法中先判断是否收到断点续传命令”REST”:

在开始下载前onDownloadStart前监听方法中记录此次需要断点续传文件的总大小:

 在传输文件过程的transfer方法中:

 

八、内部平台操作

做相关数据(下载进度)推送的监听,做好内部关联,结合自己平台做好集成设计。

附架构图:

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/332988.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号