Apache FtpServer扩展【动手实现自己的业务】
public MyFtpServer() throws FtpException{
//读取my-ftpd-full.xml,连接数据库和监控配置,然后来启动server
FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext(xmlPath);
FtpServer server = null;
if (ctx.containsBean("server")) {
server = (FtpServer)ctx.getBean("server");
} else {
String[] beanNames = ctx.getBeanNamesForType(FtpServer.class);
if (beanNames.length == 1) {
server = (FtpServer)ctx.getBean(beanNames[0]);
} else if (beanNames.length > 1) {
logger.info("Using the first server defined in the configuration, named " + beanNames[0]);
server = (FtpServer)ctx.getBean(beanNames[0]);
} else {
logger.info("XML configuration does not contain a server configuration");
}
}
//ftp服务器启动
server.start();
//在jvm关闭的时候,清理函数
addShutdownHook(server);
}
/**
* 清理的垃圾的钩子函数
* @param engine
*/
private void addShutdownHook(final FtpServer engine)
{
Runnable shutdownHook = new Runnable() {
public void run() {
logger.info("Stopping server...");
engine.stop();
}
};
Runtime runtime = Runtime.getRuntime();
runtime.addShutdownHook(new Thread(shutdownHook));
}



<ftplets>
<ftplet name="MyFtplet">
<beans:bean class="com.shiyi.km.ftpserver.control.MyFtplet">
<!-- <beans:property name="foo" value="123" /> -->
</beans:bean>
</ftplet>
</ftplets>
import java.io.File;
import java.io.IOException; import org.apache.ftpserver.ftplet.DefaultFtpReply;
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;
import org.apache.ftpserver.ftplet.User;
import org.apache.log4j.Logger; import com.shiyi.km.ftpserver.util.ConfigUtil;
import com.shiyi.km.ftpserver.util.FileUtil; /**
*
* @fileName MyFtplet.java
* @author chenkaideng
* @date 2015年8月11日
* @describe 监控事件
*/
public class MyFtplet extends DefaultFtplet{
private static final Logger logger = Logger.getLogger(MyFtplet.class); @Override
public FtpletResult onUploadStart(FtpSession session, FtpRequest request)
throws FtpException, IOException {
//获取用户信息
User user = session.getUser();
logger.info(String.format("用户信息,用户名【%s】,用户工作目录【%s】", user.getName(),user.getHomeDirectory()));
File file=new File(user.getHomeDirectory()); //判断传入对象是否为一个文件夹对象
if(!file.isDirectory()){
logger.info("用户的HomeDirectory不是一个文件夹,请检查路径是否有误!!");
}
else{
ConfigUtil configUtil = ConfigUtil.getInstance();
if(FileUtil.overSizeLimit(configUtil.getQuota(), file)){
logger.error(String.format("目前用户[%s]目录下的文件总大小超过配额!!!", user.getName()));
session.write(new DefaultFtpReply(228, "The files under the directory over quota"));
return FtpletResult.DISCONNECT;
}
}
return super.onUploadStart(session, request);
}
}
Apache FtpServer扩展【动手实现自己的业务】的更多相关文章
- springboot整合apache ftpserver详细教程(看这一篇就够了)
原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/12192425.html,否则将追究法律责任!!! 一.Apache ftpserver相关 ...
- 使用Apache FtpServer搭建FTP服务器 [FlashFXP]
<server xmlns="http://mina.apache.org/ftpserver/spring/v1" xmlns:xsi="http://www.w ...
- 01.Apache FtpServer配置
1.解压Apache FTPServer 将下载下来的压缩包(ftpserver-1.0.6.zip)解压到本地,其目录结构如下图: 2.修改users.properties 修改 \apache-f ...
- apache FtpServer 整合spring部署
我们在项目中可能会出现这样的需求,使用ftp上传很大的文件后对需要对文件进行相应的逻辑处理,这时我们可以使用apache ftpServer来处理这段逻辑,只要我们做相应的部署和编写我们的逻辑代码,这 ...
- apache FtpServer整合spring逻辑处理
上面我们的部署工作完成了,那么文件上传下载后,ftpserver会自动相应我们的上传下载操作,也就是说ftpServer服务器会得到触发,那么我们如果要得到文件的一些信息,比如说文件的路径.大小.类型 ...
- Apache FtpServer 实现文件的上传和下载
1 下载需要的jar包 Ftp服务器实现文件的上传和下载,主要依赖jar包为: 2 搭建ftp服务器 参考Windows 上搭建Apache FtpServer,搭建ftp服务器 3 主要代码 在ec ...
- (转载)Windows 上搭建Apache FtpServer
因工作需要,最近经常接触到FTP,今天我来介绍一个开源的FTP服务器,那就是Apache FTPServer,Apache FTPServer是一个100%纯Java的FTP服务器. 它的设计是基于现 ...
- Apache和Tomcat整合(一个Apache 不同域名处理多个不同业务)
一.简介 在项目中,几乎任何一个项目都包括静态资源和动态请求两大部分.特别对于门户网站这样的项目,静态内容资源会更多,我们使用一般的 Tomcat 部署时,Tomcat 对静态资源的处理能力比较慢,至 ...
- android学习:Android上面部署Apache FTPServer
经过了几天的研究,终于Apache FTPServer在Android的配置和使用上有了一些心得,现在分享出来,提供给大家参考,说到这儿又不得不吐槽一下这要命的转载了,找Apache FTPServe ...
随机推荐
- docker配置环境
debian: curl -sSL https://get.docker.com/ | sh curl -sSL https://get.daocloud.io/docker | sh daoclou ...
- 如何把python最小化安装在客户机上面
因为想尝试在我们的桌面软件中加入python支持,所以想简化python的库,到时候直接放到客户机上面,并且放到我们的目录下,尽量免去不必要的东西,也不要影响机子,不过当写好的程序放到测试机子上后,老 ...
- sgu233 little kings
题目大意: 有n*n的棋盘上放k个国王.国王可以攻击与它相邻的八个格子.现在要使国王不相互攻击,有多少种放置的方案数.一个格子不能放两个国王. n<=10,k<=n*n. 分析:简单的状态 ...
- 怎样减少FLASH影片文件过大——绝对好用
网站建设中怎样减少FLASH影片文件过大 一,制作前的处理 1声音(mp3): GoldWave中打开需要处理的mp3,然后把它另存为---在最下一栏的属性中选择较低的字节数,例如,本来的mp3 ...
- HDMI的CEC是如何控制外围互联设备的
1. HDMI CEC算是一个相当庞大的系统,想了解还要从HDMI接口信号啊.物理地址啊.逻辑地址啊等等HDMI基础的东西说起. 2. 不过可以简单的这么理解,在HDMI CEC最小系统里,所有通过H ...
- 通过FTP自动上传当天的备份数据
@echo off del f:\ftpcfg.txt echo open 192.168.123.2>f:\ftpcfg.txt echo WMS>>f:\ftpcfg.txt e ...
- 138. Copy List with Random Pointer
A linked list is given such that each node contains an additional random pointer which could point t ...
- PLSQL_基础系列05_视图控制WITH CHECK OPTION(案例)
2014-12-09 Created By BaoXinjian
- Workflow_如何处理标准异常和自定义异常(案例)
2014-05-31 Created By BaoXinjian
- 在一个窗口中显示多个视频,并在每个子窗口左上角显示系统时间,函数cvShowManyImages是改写的
#include <cv.h> #include <highgui.h> #include <stdio.h> #include <stdarg.h> ...