关于ftp服务器安装和断点续传的问题

410 阅读2分钟

vsftpd是一个流行的 FTP 服务器,支持断点续传。

1、安装和配置ftp服务器

1、安装ftp服务器

1、安装vsftpd

sudo yum install vsftpd

安装在了/etc/vsftpd/目录下

1700451754762.png

2、设置开机启动

sudo systemctl enable vsftpd

3、启动

sudo systemctl start vsftpd

4、查看状态

sudo systemctl status vsftpd

5、安装windows客户端

FileZilla

1700448254779.png

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用户登录的密码。

1700448896309.png

执行命令 生成虚拟数据库

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,在最上方添加如下配置

1700449477252.png

4、虚拟用户配置

根据虚拟用户名创建配置文件/etc/vsftpd/user_conf/ftp,并指定相关目录

1700449808147.png

5、修改配置文件

vim /etc/vsftpd/vsftpd.conf

具体配置如下

image.png

6、重启服务

sudo service vsftpd restart

1700450453227.png

2、断点续传

使用commons-net库连接FTP服务器并实现断点续传

<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version> </dependency>

在上传文件的时候,如果网络异常,会抛出异常,我主要是在发生异常的时候,又进行了一次文件上传。 代码如图

image.png

3、断点续传问题

现象

在第一次文件上传的时候,发生网络故障,文件只上传了一部分; 在第二次进行文件续传的时候,会挂起在 ftpClient.storeFile(),等待很长很长时间才返回,最后勉强算是文件续传成功; vsftpd重启后,文件续传不用等待了; FZ客户端也是类似的现象。

分析

应该是上一次传输&链接中断的时候,服务有什么东西被占用了,重启服务就释放了。 分析vsftpd的配置文件,有一个属性-文件锁lock_upload_files默认是YES,应该是上一次文件上传的时候,文件锁没有释放,等待那么长时间,是等待锁超时。

修改配置文件,加上如下配置

lock_upload_files=NO

image.png

参考

vsftpd配置文件文档:security.appspot.com/vsftpd/vsft…