使用Apache FtpServer
Java大法一统天下。遇到任何问题,先查一下Java中的解决方案。
地球上的许多事情,在Java中都能找到完美的解决方案。
FtpServer是apache MINA项目的一个子项目,它实现了一个ftp服务器,与vsftpd是同类产品.
Filezilla是一个可视化的ftp服务器.
Ftp客户端也有很多,如Filezilla,FlashFXP,SmartFtp等,其中只有Filezilla是免费的.
之前搭建ftp服务器使用的是vsftpd,现在可以把它卸掉了,它以服务的形式运行,并且它包含很多我所不知道的东西。
使用步骤
- wget url下载压缩包
- tar-zxvf解压ftpserver
- 进入bin目录,更改ftpd.sh,添加JAVA_HOME变量
- 输入指令:./ftpd.sh res/conf/ftpd-typical.xml & 其中‘&’表示后台运行.
在ftpd-typical.xml中可以更改密码,这里的密码是MD5加密了的。用一段Python代码来实现:
import hashlib
md5 = hashlib.md5()
md5.update(bytes("xxxxxx", encoding='utf8'))
ans = md5.hexdigest()
print(ans)
运行之后,将所得MD5字符串粘贴到ftpd-typical.xml中即可。
一开始ftpd-typical.xml中只有两个用户,一个是admin,一个是anonymous。
可以更改ftpserver.user.admin.homedirectory属性,自定义上传文件的根目录。
最好把ftpserver.user.anonymous.enableflag置为false,这样比较安全。
使用FileZilla进行连接时,点击“文件-站点管理器-新建”进行如下设置:
这里要注意
- ftpd.sh中有一句
cd $FTPD_HOME
,这就使得这个程序的当前目录变成了$FTPD_HOME
.
如果ftpd-typical.xml路径不对,会一直报"文件未找到"异常. - ftpd.sh需要提供配置文件名称作为参数,它的行为取决于ftpd.xml的配置,一般情况下,使用ftpd-typical已经足够了.如果不知道ftpd.xml怎么配置,可以参考ftpd-full.xml,这个文件列出了所有的参数.
- 默认情况下,用户名和密码都是admin,端口号为2121。
ftp的默认端口号为21,http默认端口号为80,tomcat默认端口号为8080,django默认端口号8000。
因为1024以内的端口号是不允许随便占用的,而1024以后的却可以.所以,要想占用1024以内的端口号,就要通过sudo命令. - 默认情况下,user.properties中的用户密码是md5加密的,要想不加密,需要更改ftpd-typical.xml.匿名用户对于服务器上的文件是只读的,这可以在user.properties中设置权限.
问题到这里并没有结束,当退出shell之后,ftpd也就跟着停止运行了。
这个问题就是:在linux shell关闭后,程序如何才能继续运行?
程序脱离shell后台运行
(1)方案一
CTRL+Z暂停程序,bg [作业号]将程序后台运行.这一步相当于使用[命令名]&运行程序.
对于后台运行的程序,它只是不占用shell了,但它仍然是shell的子程序,shell一死,它仍然要跪.所以需要使用命令
disown -h %1
来把这个程序"不属于"shell.
bg是把程序放到后台,fg是把程序调到前台.
用jobs命令查看当前作业.jobs -l查看作业列表.
当使用disown把程序解除之后,可以通过ps -e | grep bash 命令查看这个程序,可以kill之.
(2)方案二
SIGHUP是linux中信号的一种,表示hang up(挂起)信号.当shell收到SIGHUP信号时,shell的儿子们也会收到这个信号.
nohup ./haha.sh arg1 arg2 arg3 &
默认情况下,haha.sh运行过程中的一切输出都写入到了~/nohup.out文件中,注意要让nohup在后台运行,所以加上"&".
然后ps -ex | grep haha,就可以看见这个程序了.
关闭当前shell,重新打开一个,仍旧ps -ex | grep haha,发现还在运行着.
(3)方案三:使用screen/tmux
方案二是最完美的解决方案,更改ftpd.sh,把其中最后运行Java的那句话用nohup重写一遍,把错误信息输出到控制台下,让这个程序后台执行
eval "$JAVACMD" -classpath "$FTPD_CLASSPATH" "$MAIN_CLASS" "$CONFIG_FILE" 2>&1 "&"
(4)方案四:使用supervisor管理进程
(5)方案五:将ftpd设置成服务
测试和异常
如何测试一个ftp服务器是不是好使?方法一:打开浏览器输入ftp://ip地址:端口号;方法二:使用filezilla.
如果filezilla报错"收到服务器的 TLS 警告: Handshake failed (40)",文件>站点管理>新建站点,加密方式选择:只是用普通ftp,这种方式不太安全.
今天使用Filezilla上传文件总是失败,一直显示
错误: 20 秒后无活动,连接超时
错误: 文件传输失败
用FlashFXP却可以很正常上传文件,但FlashFXP试用期只有30天,网上搜索注册码未果,遂想学学java实现ftp文件上传,FtpServer也有一个对应的客户端库。
使用Apache FtpServer的更多相关文章
- Apache FtpServer扩展【动手实现自己的业务】
Apache FtpServer是当下最热门的走ftp协议的用于用户上传下载的服务器. 官网http://mina.apache.org/ftpserver-project/ 一般来说,用的话,去 ...
- 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服务器. 它的设计是基于现 ...
- android学习:Android上面部署Apache FTPServer
经过了几天的研究,终于Apache FTPServer在Android的配置和使用上有了一些心得,现在分享出来,提供给大家参考,说到这儿又不得不吐槽一下这要命的转载了,找Apache FTPServe ...
- apache ftpserver外网访问配置
apache ftpserver搭建ftp服务非常简单,若只是内网访问,几乎不需要配置,直接启动即可.但若需要外网访问,则需要注意以下几点. 1.若是外网访问,主动模式是不行的,因为客户端报告给服务器 ...
- 使用Apache FtpServer搭建FTP服务器 [FlashFXP]
<server xmlns="http://mina.apache.org/ftpserver/spring/v1" xmlns:xsi="http://www.w ...
- Windows 上搭建Apache FtpServer
阅读目录 第一步:下载Apache FTPServer 第二步:解压Apache FTPServer 第三步:修改配置文件 第四步:启动FTPServer 第五步:访问FTP 第六步:FTPServe ...
随机推荐
- 【BZOJ】【1941】【SDOI2010】Hide and Seek
KD-Tree 一开始看错题了
- MySQL冷知识
问题:在网站后台添加了扩展字段后,对于数据库表不太熟悉的,可能会花较长时间查找,如何有效提高我们的工作效率呢? 解决方法:利用SQL语句来查询字段所在的表
- C语言:通过指针函数输出二维数组中每个学生的成绩
// // main.c // Pointer_function // // Created by ma c on 15/8/2. // Copyright (c) 2015年 bjsxt. ...
- Informatica 常用组件Aggregator之三 使用排序输入
可以使用排序输入选项改善聚合转换性能.使用排序输入时,PowerCenter 会假定所有数据已按组排序.PowerCenter 读取某组的行时,它将执行聚合计算.需要时,它会将组信息存储在存储器中.要 ...
- poj 3131 Cubic Eight-Puzzle 双向广搜 Hash判重
挺不错的题目,很锻炼代码能力和调试能力~ 题意:初始格子状态固定,给你移动后格子的状态,问最少需要多少步能到达,如果步数大于30,输出-1. 由于单向搜索状态太多,搜到二十几就会爆了,所以应该想到双向 ...
- Python中filter、map、reduce、lambda 的用法
Python内置了一些非常有趣但非常有用的函数,充分体现了Python的语言魅力! filter(function, sequence):对sequence中的item依次执行function(ite ...
- Best Time to Buy and Sell Stock II leetcode java
题目: Say you have an array for which the ith element is the price of a given stock on day i. Design a ...
- android 多线程概述
android多线程,一直是一个麻烦的事情,要掌握它的本质,我们需要搞清楚一个问题,linux多线程的本质. 我们这篇文章,来讨论以下的议程: 了解linux的历程,了解android的异步任务机制, ...
- 红黑树,TreeMap,插入操作
红黑树 红黑树顾名思义就是节点是红色或者黑色的平衡二叉树,它通过颜色的约束来维持着二叉树的平衡.对于一棵有效的红黑树二叉树而言我们必须增加如下规则: 1.每个节点都只能是红色或者黑色 2.根节点是黑色 ...
- Cognos利用DMR与文本对象设计中国式报表
场景:详细对于接触Cognos的人来说,简单的拖拉报表.交叉表这个工作大家都可以完成,下面我们就来实现一下类似下面的效果. 下面简单的说一下实现过程: 利用Framework Manager创建DMR ...