It's designed to be a complete and portable FTP server engine solution based on currently available open protocols.
FtpServer can be run standalone as a Windows service or Unix/Linux daemon, or embedded into a Java application.
The default network support is based on Apache MINA, a high performance asynchronous IO library.
By utilizing MINA, FtpServer can be scaled to a large number of concurrent users.
It is also an FTP application platform. We have developed a Java API to let you write Java code to process FTP event notifications that we call the Ftplet API. Apache FtpServer provides an implementation of an FTP server to support this API.
Here are some key features of "Apache FtpServer":
· 100% pure Java, free, open source resumable FTP server
· Multi platform support and multithreaded design.
· User virtual directory, write permission, idle time-out and upload/download bandwidth limitation support.
· Anonymous login support.
· Both upload and download files are resumable.
· Handles both ASCII and binary data transfers.
· IP restriction support to ban IPs.
· Database and file can be used to store user data.
· All the FTP messages are customizable.
· Implicit/explicit SSL/TLS support.
· MDTM support - your users can change the date-time stamp of files.
· "MODE Z" support for faster data upload/download.
· Custom user manager, IP restrictor, logger can be added easily.
· User event notifications can be added (Ftplet).
What's New in This Release: [ read full changelog ]
Bugs:
· It takes about 1 minute and 100% CPU to set a "wide" passive port range
· (org.apache.ftpserver.DefaultDataConnectionConfiguration$Passive.SetPorts())
· [FindBugs] Possible null pointer dereference of passivePorts in PassivePorts::<init>
· OPTS MLST does not correctly handle character case
· Typo in http://mina.apache.org/ftpserver/ftp-commands.html
· Typo in http://mina.apache.org/ftpserver/ftplet.html
· distribution/res/ftp-db.sql has extraneous text at start of file
· Server certificate shipped in ftpserver.jks has expired
· OPTS MLST does not handle unknown factnames correctly
· STAT command returns wrong 200 state
· STAT / creates invalid directory listing (with Patch)
· NPE in PassivePorts(int[] passivePorts, boolean checkIfBound) constructor
· FtpServer core no longer needs ORO
· Ignored/invalid assertion failure in FtpLetReturnDefaultTest.testLogin()
· PassivePorts.reserveNextPort() is not synchronized
Improvements:
· StringBuffer => StringBuilder for internal use
· When picking a passive port, use "random port" from the pool instead of "lowest port"
· Upgrade to MINA 2.0.4
· Clie