原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/12192425.html,否则将追究法律责任!!!
Apache FtpServer是100%纯Java FTP服务器。它被设计为基于当前可用的开放协议的完整且可移植的FTP服务器引擎解决方案。FtpServer可以作为Windows服务或Unix / Linux守护程序独立运行,也可以嵌入Java应用程序中。我们还提供对Spring应用程序内集成的支持,并以OSGi捆绑软件的形式提供我们的发行版。默认的网络支持基于高性能异步IO库Apache MINA。使用MINA,FtpServer可以扩展到大量并发用户。
- 100%纯Java,免费的开源可恢复FTP服务器
- 多平台支持和多线程设计。
- 用户虚拟目录,写入权限,空闲超时和上载/下载带宽限制支持。
- 匿名登录支持。
- 上传和下载文件都是可恢复的。
- 处理ASCII和二进制数据传输。
- 支持IP限制以禁止IP。
- 数据库和文件可用于存储用户数据。
- 所有FTP消息都是可定制的。
- 隐式/显式SSL / TLS支持。
- MDTM支持-您的用户可以更改文件的日期时间戳。
- “模式Z”支持更快地上传/下载数据。
- 可以轻松添加自定义用户管理器,IP限制器,记录器。
- 可以添加用户事件通知(Ftplet)。
- 1、根据需要下载对应版本的部署包:https://mina.apache.org/ftpserver-project/downloads.html
- 2、解压部署包并调整. esconf퇬.properties和. esconfftpd-typical.xml配置文件

- 3、启动并访问
- 测试访问,打开浏览器输入:ftp://localhost:2121/就会看到你的文件目录了,如果没有配置匿名用户,则会要求你输入用户名密码,正是你在user.properties中配置的
这种方式比较简单,只要把服务部署好即可,然后通过FtpClien来完成相关操作,同jedis访问redis服务一个道理,没啥可说的。主要注意一下ftpserver的访问模式,如果要支持外网连接,需要使用被动模式passive。
这种方式需要和springboot整合在一起,相对比较复杂,但这种方式下ftpserver会 随着springboot服务启动或关闭而开启或销毁。具体使用哪种方式就看自己的业务需求了。
简单说一下我的实现的方案,ftpserver支持配置文件和db两种方式来保存账号信息和其它相关配置,如果我们的业务系统需要将用户信息和ftp的账号信息打通,并且还有相关的业务统计,比如统计系统中每个人上传文件的时间、个数等等,那么使用数据库来保存ftp账号信息还是比较方便灵活的。我这里就选择使用mysql了。
- 1、项目添加依赖
- 2、数据库建表用来保存相关的账户信息(大家可以手动添加几条用来测试),具体字段意思参考users.properties文件配置(可以想象一下以后我们的系统每注册一个用户都可以为其添加一条ftp_user信息,用来指定保存用户的上传数据等等)
- 3、配置ftpserver,提供ftpserver的init()、start()、stop()方法
- 4、配置监听器,使spring容器启动时启动ftpserver,在spring容器销毁时停止ftpserver
- 5、通过继承DefaultFtplet抽象类来实现一些自定义用户事件(我这里只是举例)
- 6、 配置springboot静态资源的访问
- 7、以上6步已经完成ftpserver的配置,随着springboot项目的启动就会开启ftpserver服务,下面在给大家贴一下客户端的访问的util,大家可以自行封装一下即可。
到此,所有的配置已经完成,我们的业务系统也同时也承担了一个角色,那就是ftp服务器,整个配置是没有加入SSL/TLS安全机制的,大家如果感兴趣可以自行研究下。我代码中注释那那部分,只是注意下通过客户端访问时,需要使用FtpsCliet,而非FtpCliet。当然还需要配置你自己的ftpserver.jks文件,也就是java key store。百度下一下如何生成,很简单哦!
个人博客地址:
cnblogs:https://www.cnblogs.com/baixianlong/
github:https://github.com/xianlongbai
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/8781.html