说明
- 事由:公司IPC产品需要支持FTP上传人脸抓拍图功能。
- FTP功能是C/S模型,由FTP服务器以FTP协议提供上传服务。
环境搭建
- 调试过程中需要自己搭建服务器来验证功能。
服务器安装
- 由于FTP协议出现已经非常久了,网络上可以找到的FTP服务器非常多,但是最好使用较为闻名的服务器,性能和稳定性更有保障,此次调试过程中就出现,测试使用不知名的服务器,导致长时间循环上传图片出现丢图片,上传中断的问题,浪费宝贵的验证时间。
- 常见的服务器:windows上的FileZilla Server,Linux上的vsftp等,使用过程中性能和稳定性都非常不错,FileZilla Server使用较为简单,没有太多配置。
- vsftp,全称是Very Secure FTP,从名称可以看出来,作者的初衷是服务的安全性。
- 安装
sudo apt install vsftpd
- 查看ftp服务器状态
service vsftpd status
- 启动ftp服务器
service vsftpd start
- 重启ftp服务器
service vsftpd restart
服务器配置
- vsftpd 3.0.3安装后默认生成了下面的配置文件。
/etc/vsftpd.conf
- 配置略。
FTP协议
- FTP客户端通过FTP协议将文件上传到FTP服务器。
协议特征
- 类似于Http1.1等协议,FTP是字符协议,发送的数据是字符形式的。
上传流程
- 首先客户端使用服务默认端口(21)与服务器创建一个socket链接,通过字符串的形式发送命令,例如:登录,模式设置,上传,下载等等,服务器收到命令,进行相应执行后会返回字符形式的数字响应码,客户端根据响应码判断执行结果。
- 当需要进行文件上传或下载时,服务器会返回一个新的端口,客户端与服务器之间会以此端口创建一个新的短链接进行文件发送,发送完就关闭。
主动模式和被动模式
- 创建文件传输链接时,有两种方式:
- 客户端充当服务器,开放端口,服务器主动连接客户端指定的数据端口,连接成功后进行文件传输,也称为主动模式。
- 服务器开放数据端口,客户端去连接服务器,连接成功后进行文件传输,也称为被动模式。
- 主动模式和被动模式是站在服务器角度描述。
常用命令
命令 | 描述 |
---|---|
ABOR | 中断数据连接程序 |
ACCT | 系统特权帐号 |
ALLO | 为服务器上的文件存储器分配字节 |
APPE | 添加文件到服务器同名文件 |
CDUP
| 改变服务器上的父目录 |
CWD
| 改变服务器上的工作目录 |
DELE | 删除服务器上的指定文件 |
HELP | 返回指定命令信息 |
LIST | 如果是文件名列出文件信息,如果是目录则列出文件列表 |
MODE | 传输模式(S=流模式,B=块模式,C=压缩模式) |
MKD | 在服务器上建立指定目录 |
NLST | 列出指定目录内容 |
NOOP | 无动作,除了来自服务器上的承认 |
PASS | 系统登录密码 |
PASV | 请求服务器等待数据连接 |
PORT | IP地址和两字节的端口ID |
PWD | 显示当前工作目录 |
QUIT | 从FTP服务器上退出登录 |
REIN | 重新初始化登录状态连接 |
REST | 由特定偏移量重启文件传递 |
RETR | 从服务器上找回(复制)文件 |
RMD | 在服务器上删除指定目录 |
RNFR | 对旧路径重命名 |
RNTO | 对新路径重命名 |
SITE | 由服务器提供的站点特殊参数 |
SMNT | 挂载指定文件结构 |
STAT | 在当前程序或目录上返回信息 |
STOR | 储存(复制)文件到服务器上 |
STOU | 储存文件到服务器名称上 |
STRU | 数据结构(F=文件,R=记录,P=页面) |
SYST | 返回服务器使用的操作系统 |
TYPE | 数据类型(A=ASCII,E=EBCDIC,I=binary) |
USER | 系统登录的用户名 |
响应码
响应代码 | 解释说明 |
---|---|
110 | 新文件指示器上的重启标记 |
120 | 服务器准备就绪的时间(分钟数) |
125 | 打开数据连接,开始传输 |
150 | 打开连接 |
200 | 成功 |
202 | 命令没有执行 |
211 | 系统状态回复 |
212 | 目录状态回复 |
213 | 文件状态回复 |
214 | 帮助信息回复 |
215 | 系统类型回复 |
220 | 服务就绪 |
221 | 退出网络 |
225 | 打开数据连接 |
226 | 结束数据连接 |
227 | 进入被动模式(IP地址、ID端口) |
230 | 登录因特网 |
250 | 文件行为完成 |
257 | 路径名建立 |
331 | 要求密码 |
332 | 要求帐号 |
350 | 文件行为暂停 |
421 | 服务关闭 |
425 | 无法打开数据连接 |
426 | 结束连接 |
450 | 文件不可用 |
451 | 遇到本地错误 |
452 | 磁盘空间不足 |
500 | 无效命令 |
501 | 错误参数 |
502 | 命令没有执行 |
503 | 错误指令序列 |
504 | 无效命令参数 |
530 | 未登录网络 |
532 | 存储文件需要帐号 |
550 | 文件不可用 |
551 | 不知道的页类型 |
552 | 超过存储分配 |
553 | 文件名不允许 |