设为首页 收藏本站
查看: 1532|回复: 0

[经验分享] 扩展 COMMON-NET和APACHE FTP SERVER命令

[复制链接]

尚未签到

发表于 2016-6-10 08:22:19 | 显示全部楼层 |阅读模式
  项目中使用apache ftp server提供文件接收服务,需要在文件接收完毕修改状态为:传输完毕。根据apache文档,只需实现FtpLet接口就可以实现命令执行前后的监控了。看了下APACHE FTP SERVER的源码,FtpLet的beforeCommand方法在Command执行前调用, afterCommand方法在Command执行后调用。那很清晰了,只要在afterCommand里监控ftp命令STOR和APPE就好了。但这里有个问题,server 端无法得知上传文件的大小,很郁闷。想想也对,只有客户端才关心这个问题,服务端只管存好了。那这里就有问题了,SERVER端无法判断文件是否上传完毕,原因:1. 文件大小不知,2.afterCommand方法即使客户端传输异常也会在关闭IO前调用。 只好扩展FTP 命令,增加FEND(文件传输完毕恭毕敬)命令,客户端成功上传后调用该命令:FEND FILENAME通知服务器该文件上传成功.同时在afterCommand中监控FEND 命令,取出文件名参数,然后在状态表中按文件名查询后,更新状态就好了.思路大该如此,下面说说具体要做哪些工作.
  
  1.客户端修改内容,apache common-net包中,FTP包里修改:
      1 FTPCommand类,增加FEND命令
      2 FTP类, 增加fend(String fileName)方法,里面调用: sendCommand(FTPCommand.FEND,fileName)
      3 FtpClient类,增加sendFileComplete(String fileName)方法调用上面的fend命令,供客户端程序上传文件后调用。
   
  2.apache ftp server端修改内容 这边有两种改法:
      方法1:不修改源码方法. 实现FEND命令, 使用CommandFactoryFactory中的addCommand动态添加新命令.
     
      2:修改源码方法: 实现FEND命令,修改CommandFactoryFactory,在里面的MAP中添加已实现的FEND命令. 实现FEND命令继承AbstractCommand
   
   3.实现自己的Ftplet,继承DefaultFtplet,实现方法

public FtpletResult onFend(FtpSession session, FtpRequest request) 覆盖
public FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply) throws FtpException, IOException {
String command = request.getCommand().toUpperCase();
if ( "FEND".equals(command)){
return onFend(session, request);
}else{
return super.afterCommand(session, request, reply);
}
}

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-228444-1-1.html 上篇帖子: redhat6.0配置FTP 下篇帖子: 开启HP-UN 11.31 的ftp服务
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表