`
lenozhi
  • 浏览: 51873 次
社区版块
存档分类
最新评论

扩展 COMMON-NET和APACHE FTP SERVER命令

阅读更多

项目中使用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); 
  } 
}

 

分享到:
评论
9 楼 lenozhi 2012-03-07  
catmimigo 写道
DefaultFtplet里不有很多时间通知吗?
	public FtpletResult onUploadEnd(FtpSession session, FtpRequest request)
			throws FtpException, IOException {
		System.out.println("transport complete");
		//session.write(new DefaultFtpReply(555, "Error!"));
		return FtpletResult.SKIP;
	}


时间通知?干啥用的
8 楼 catmimigo 2012-02-28  
DefaultFtplet里不有很多时间通知吗?
	public FtpletResult onUploadEnd(FtpSession session, FtpRequest request)
			throws FtpException, IOException {
		System.out.println("transport complete");
		//session.write(new DefaultFtpReply(555, "Error!"));
		return FtpletResult.SKIP;
	}
7 楼 lenozhi 2011-11-23  
wangrui 写道
客户端程序上传文件后直接发送RNTO(重命名命令)

好主意。后来又想了个法儿,发个一个空文件,主名相同,后缀改成OK。
6 楼 wangrui 2011-09-17  
客户端程序上传文件后直接发送RNTO(重命名命令)
5 楼 lenozhi 2010-12-31  
java_newclass_eye 写道
您好,请问如何将ftplet添加到ftpserver classpath 中才能下载ftplet?如何在浏览器中查看ftplet class 文件?非常感谢。

java_newclass_eye 写道
请问如何将ftplet添加到ftpserver classpath 中才能下载ftplet?如何在客户端浏览器中查看ftplet class 文件?非常感谢。

没看懂什么意思?ftplet可以在ftpserver网页上下载。
4 楼 java_newclass_eye 2010-12-20  
请问如何将ftplet添加到ftpserver classpath 中才能下载ftplet?如何在客户端浏览器中查看ftplet class 文件?非常感谢。
3 楼 java_newclass_eye 2010-12-20  
您好,请问如何将ftplet添加到ftpserver classpath 中才能下载ftplet?如何在浏览器中查看ftplet class 文件?非常感谢。
2 楼 lenozhi 2010-11-27  
yangtao22 写道
请教时间自己的Ftplet,继承DefaultFtplet,这个自己写的类如何才能生效呢?

配置如下:
  <ftplet name="LogFtplet">
    <beans:bean class="net.tscms.ftp.ftplet.LogFtplet">
  </ftplet>
     
这个配置文件还有其他内容,去官网看看。
1 楼 yangtao22 2010-11-18  
请教时间自己的Ftplet,继承DefaultFtplet,这个自己写的类如何才能生效呢?

相关推荐

    Apache Common-net Ftp客户端实例

    Apache Commons Net库是Apache软件基金会开发的一个Java库,它提供了许多网络协议的实现,包括FTP(文件传输协议)。...在实际项目中,可以根据需求扩展此类,实现更复杂的FTP功能,如遍历目录、删除文件等。

    apache-ftpserver-1.0.6

    这个"apache-ftpserver-1.0.6"版本是该软件的一个特定发布版,包含了在该版本中所实现的功能和改进。 FTP(File Transfer Protocol)是一种用于在网络上进行文件传输的标准协议,基于TCP/IP协议族。FTP服务器允许...

    Icinga文档

    - 创建`.repo`文件,例如`server1.repo`,并在其中定义仓库信息。 2. **导入GPG Key**: - 执行`rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release`来导入GPG Key。 3. **安装所需软件包**: - 使用`yum...

    crossftpserver-1.09-src.zip

    这部分代码会涉及到TCP/IP套接字编程,理解数据传输、控制连接的建立和断开,以及如何处理FTP命令如LIST、RETR、STOR等。 2. **用户认证模块**:处理用户登录,可能包括基本的用户名/密码验证,也可能支持更复杂的...

    服务器中间件加固,防火墙加固,日志安全管理

    - 在`conf/server.xml`中设置`unpackWARs="false"`和`autoDeploy="false"`。 - **启用HTTP-only属性:** - 在`$CATALINA_HOME/conf/context.xml`中添加`&lt;Context useHttpOnly="true"&gt;`。 - **禁止列出目录内容:...

    iis6.0安装包

    9. **脚本和组件支持**:IIS 6.0支持ASP(Active Server Pages)、CGI(Common Gateway Interface)和ISAPI(Internet Server API)扩展,允许开发者使用脚本语言(如VBScript和JScript)或编译的C++扩展开发动态...

    行业文档-设计装置-Linux服务端与windows客户端之间跨平台文件的传输方法.zip

    SAMBA是一种在Linux和Windows之间实现SMB/CIFS(Server Message Block/Common Internet File System)协议的软件。通过Samba,Linux服务器可以作为Windows网络上的共享资源,Windows客户端可以直接访问。 8. **云...

    XP IIS5.1安装文件

    另外,还可以考虑使用其他开源Web服务器,如Apache或Nginx,它们具有更好的扩展性和安全性。 总结来说,XP IIS5.1是Windows XP系统内置的Web服务器,尽管在个人开发和学习环境中仍然适用,但在生产环境中应考虑更新...

    免费Oracle Web信息发布系统的设计与实现.pdf

    11. 系统的可扩展性和维护性:虽然文档没有明确说明,但基于B/S架构和UNIX、Oracle的技术栈,我们可以推断系统在设计上应具有良好的可扩展性和维护性。 综上,该文档详细介绍了Oracle Web信息发布系统的设计与实现...

    服务器环境测试包

    1. **服务器环境**:服务器环境是指服务器操作系统、Web服务器软件(如Apache、IIS)、数据库系统(如MySQL、SQL Server)等构成的整体运行环境。测试包能够检查这些组件是否正确安装并配置,确保服务器能为不同类型...

    IIS5.1 XP安装压缩包

    1. **Web服务器**: IIS5.1可以托管静态HTML页面、动态ASP(Active Server Pages)脚本,以及通过CGI(Common Gateway Interface)接口运行的自定义应用程序。 2. **FTP服务器**: 提供文件传输服务,允许用户上传和...

    .htaccess

    As a general rule, if your server runs Unix or Linux, or any version of the Apache web server it will support .htaccess, although your host may not allow you to use it. 这可能很难用简单的答案来...

Global site tag (gtag.js) - Google Analytics