日期:2014-05-16  浏览次数:20833 次

apache FtpServer整合spring逻辑处理

    上面我们的部署工作完成了,那么文件上传下载后,ftpserver会自动相应我们的上传下载操作,也就是说ftpServer服务器会得到触发,那么我们如果要得到文件的一些信息,比如说文件的路径、大小、类型等等,并且还有我们的逻辑要处理,比如说要将一些信息插入到我们的数据库中,这时我们就要编写一个类,最主要的是这个类要extends一个很重要的类---DefaultFtplet,我们就会得到想要的文件数据,下面对其方法进行相应的详细介绍:

   

在DefaultFtplet中提供了很多方法接口,用于在客户端连接、断开、上传下载时返回信息。具体的列表参考http://mina.apache.org/ftpserver/ftplet.html

我们先override其中的method.

 

先写一个类public static class MyFtplet extends DefaultFtplet {}

然后点击eclipse中的source-override/implement method。eclipse会把可以override的method全部列出来,里面的方法基本上可以满足我们的项目需求。

我们选择onConnect,onLogin,onUpLoadEnd,onDisconnect这四个基本的方法。勾选完之后点击“OK ",这些方法就自动override好了。

 

二、session
override之后的方法里面有一个参数是FtpSession session。下面看看这个参数中的一些常用功能。

session.getConnectionTime()

获取用户连接的时间

session.getFileSystemView()

获取当前服务器的文件结构,返回类型为FtpFile

session.getFileSystemView().getHomeDirectory()

获取服务器根目录路径,返回类型为FtpFile

session.getFileSystemView().getWorkingDirectory()

获取用户当前连接的目录路径,返回类型为FtpFile

session.getFileSystemView().getWorkingDirectory().getName()

获取用户当前连接的目录名字,返回类型为String

session.getFileSystemView().getWorkingDirectory().getAbsolutePath()

获取用户当前连接的目录的完整路径名字,返回类型为String(返回之后最后是没有斜杠的)。用这个可以获取用户文件的存放路径。

session.getLoginTime()

获取用户登录时间(这和连接时间是不同的概念)

 

三、request
方法中的另一个参数FtpRequest request

 

request.getArgument()

获取用户提交的命令中的参数,比如存储命令,这个参数就是文件名

request.getCommand()

获取用户提交的命令中的命令。比如存储的命令是"STOR"

request.getRequestLine()

获取用户提交的命令中的命令+参数

 

例如:

package com.ftp.util;

import java.io.IOException;

import org.apache.ftpserver.ftplet.DefaultFtplet;
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.FtpRequest;
import org.apache.ftpserver.ftplet.FtpSession;
import org.apache.ftpserver.ftplet.FtpletResult;

public class FtpService extends DefaultFtplet{
	
	@Override
	public FtpletResult onUploadEnd(FtpSession session, FtpRequest request)
			throws FtpException, IOException {
			String path = session.getFileSystemView().getWorkingDirectory().getAbsolutePath();//获取当前路径  
			String rootPath = session.getUser().getHomeDirectory();//获取根目录绝对路径
			String filename = request.getArgument();//获取文件名
			System.out.println("path="+path+"rootPath="+rootPath+"filename="+filename);
		    //得到相应的信息后,下面可以进行我们的逻辑处理啦.......
		return super.onUploadEnd(session, request);
	}

	@Override
	public FtpletResult onUploadStart(FtpSession session, FtpRequest request)
			throws FtpException, IOException {
		return super.onUploadStart(session, request);
	}
}


上面只是重写了两个方法,我们可以根据项目的需求重写相应的方法即可!!这样我们的FtpServer基本上大功告成了,每当用户上传文件后,ftpServer就会得到监听,处理我们所需的逻辑块,使用applet进行ftp文件上传,见下篇,实现的主要功能是通过ftp以及client进行大文件的上传处理!!