vsftpd是一个流行的 FTP 服务器,支持断点续传。
1、安装和配置ftp服务器
1、安装ftp服务器
1、安装vsftpd
sudo yum install vsftpd
安装在了/etc/vsftpd/目录下
2、设置开机启动
sudo systemctl enable vsftpd
3、启动
sudo systemctl start vsftpd
4、查看状态
sudo systemctl status vsftpd
5、安装windows客户端
FileZilla
2、配置vsftpd的虚拟用户
1、添加系统用户vsftpd
useradd vsftpd -d /home/*/vsftpd -s /bin/false
其中,vsftpd是用户名,/home/*/vsftpd是对应的目录,/bin/false表示不能登录系统。
2、在安装目录下创建并配置虚拟用户用户名密码
vim /etc/vsftpd/ftp_user.txt
其中 ,ftp是ftp登录的用户名,123456是ftp中ftp用户登录的密码。
执行命令 生成虚拟数据库
db_load -T -t hash -f /etc/vsftpd/ftp_user.txt /etc/vsftpd/ftp_login.db
其中,/etc/vsftpd/ftp_user.txt 是上面存放用户名和密码文件的绝对路径,/etc/vsftpd/ftp_login.db 这个是生成的数据库的路径 数据库名称为 ftp_login.db
3、编辑账号的pam验证文件
修改/etc/pam.d/vsftpd,在最上方添加如下配置
4、虚拟用户配置
根据虚拟用户名创建配置文件/etc/vsftpd/user_conf/ftp,并指定相关目录
5、修改配置文件
vim /etc/vsftpd/vsftpd.conf
具体配置如下
6、重启服务
sudo service vsftpd restart
2、断点续传
使用commons-net库连接FTP服务器并实现断点续传
<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version> </dependency>
在上传文件的时候,如果网络异常,会抛出异常,我主要是在发生异常的时候,又进行了一次文件上传。 代码如图
3、断点续传问题
现象
在第一次文件上传的时候,发生网络故障,文件只上传了一部分; 在第二次进行文件续传的时候,会挂起在 ftpClient.storeFile(),等待很长很长时间才返回,最后勉强算是文件续传成功; vsftpd重启后,文件续传不用等待了; FZ客户端也是类似的现象。
分析
应该是上一次传输&链接中断的时候,服务有什么东西被占用了,重启服务就释放了。 分析vsftpd的配置文件,有一个属性-文件锁lock_upload_files默认是YES,应该是上一次文件上传的时候,文件锁没有释放,等待那么长时间,是等待锁超时。
修改配置文件,加上如下配置
lock_upload_files=NO
参考
vsftpd配置文件文档:security.appspot.com/vsftpd/vsft…