FTP/FTPS¶
1 概述¶
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。模块ftp默认是被动模式,不支持主动模式,无法设置主动模式,公网下要想模块正常连接服务器,服务器肯定不能设置为主动模式,否则哪家模块都不能用。
2 相关AT指令介绍¶
2.1 设置 FTP 控制端口:AT+FTPPORT¶
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
设置命令 |
AT+FTPPORT= |
OK |
正常返回 |
ERROR |
输入格式有误 |
||
查询命令 |
AT+FTPPORT? |
+FTPPORT: OK |
|
测试命令 |
AT+FTPPORT=? |
OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
FTP 控制端口号 |
1~65535 |
缺省值为 21 |
2.2 设置 FTP 主动或被动模式:AT+FTPMODE¶
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
设置命令 |
AT+FTPMODE= |
OK |
正常返回 |
ERROR |
输入格式有误 |
||
查询命令 |
AT+FTPMODE? |
+FTPMODE: OK |
|
测试命令 |
AT+FTPMODE=? |
OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
FTP 主动被动模式 |
0 |
主动模式(暂不支持) |
|
1 |
被动模式 |
2.3 设置 FTP 数据传输类型:AT+FTPTYPE¶
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
设置命令 |
AT+FTPTYPE= |
OK |
正常返回 |
ERROR |
输入格式有误 |
||
查询命令 |
AT+FTPTYPE? |
+FTPTYPE: OK |
|
测试命令 |
AT+FTPTYPE=? |
OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
FTP 数据传输类型 |
“A” |
FTP ASCII 字符集 |
|
“I” |
FTP Binary 字符集 |
2.4 设置 FTP 输入类型:AT+FTPPUTOPT¶
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
设置命令 |
AT+FTPPUTOPT= |
OK |
正常返回 |
ERROR |
输入格式有误 |
||
查询命令 |
AT+FTPPUTOPT? |
+FTPPUTOPT: OK |
|
测试命令 |
AT+FTPPUTOPT=? |
OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
FTP 数据传输类型 |
“APPE” |
添加文件 |
|
“STOU” |
存储唯一的文件 |
||
“STOR” |
存储文件 |
2.5 设置 FTP 承载标识:AT+FTPCID¶
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
设置命令 |
AT+FTPCID= |
OK |
正常返回 |
ERROR |
输入格式有误 |
||
查询命令 |
AT+FTPCID? |
+FTPCID: OK |
|
测试命令 |
AT+FTPCID=? |
OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
FTP 承载标识 |
1~3 |
同+SAPBR 中定义。缺省值为 0。 |
2.6 设置 FTP 下载续传:AT+FTPREST¶
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
设置命令 |
AT+FTPREST= |
OK |
正常返回 |
ERROR |
输入格式有误 |
||
查询命令 |
AT+FTPREST? |
+FTPREST: OK |
|
测试命令 |
AT+FTPREST=? |
OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
要续传的断点 |
2.7 设置 FTP 服务器地址:AT+FTPSERV¶
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
设置命令 |
AT+FTPSERV= |
OK |
正常返回 |
ERROR |
输入格式有误 |
||
查询命令 |
AT+FTPSERV? |
+FTPSERV: OK |
|
测试命令 |
AT+FTPSERV=? |
OK |
参数定义:
参 数 |
定义 |
取 | 对取值的说明 值 | |
|
---|---|---|---|
FTP 服务器地址, IP 或域名 |
32-bit 十 进 制 数 , 用 . 分 开 , 形 式 如 : xxx.xxx.xxx.xxx。 如果是 DNS,则为长度不超过 49 的 ASCII 字符串。 |
2.8 设置 FTP 用户名称:AT+FTPUN¶
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
设置命令 |
AT+FTPUN= |
OK |
正常返回 |
ERROR |
输入格式有误 |
||
查询命令 |
AT+FTPUN? |
+FTPUN: OK |
|
测试命令 |
AT+FTPUN=? |
OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
FTP 用户名 |
为长度不超过 49 的 ASCII 字符串。 |
2.9 设置 FTP 密码:AT+FTPPW¶
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
设置命令 |
AT+FTPPW= |
OK |
正常返回 |
ERROR |
输入格式有误 |
||
查询命令 |
AT+FTPPW? |
+FTPPW: OK |
|
测试命令 |
AT+FTPPW=? |
OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
FTP 密码 |
为长度不超过 49 的 ASCII 字符串。 |
2.10 设置 FTP 下载文件名称:AT+FTPGETNAME¶
设置服务器端目标文件的名称。
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
设置命令 |
AT+FTPGETNAME= |
OK |
正常返回 |
ERROR |
输入格式有误 |
||
查询命令 |
AT+FTPGETNAME? |
+FTPGETNAME: OK |
|
测试命令 |
AT+FTPGETNAME=? |
OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
FTP 下载文件名称 |
为长度不超过 99 的 ASCII 字符串。 |
2.11 设置 FTP 下载文件路径:AT+FTPGETPATH¶
本命令是设置目标文件在服务器端的路径。
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
设置命令 |
AT+FTPGETPATH= |
OK |
正常返回 |
ERROR |
输入格式有误 |
||
查询命令 |
AT+FTPGETPATH? |
+FTPGETPATH: OK |
|
测试命令 |
AT+FTPGETPATH=? |
OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
FTP 下载文件路径 |
长度不超过 255 的 ASCII 字符串。 |
2.12 设置 FTP 上传文件名称:AT+FTPPUTNAME¶
设置将文件上传到服务器后的保存名称。
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
设置命令 |
AT+FTPPUTNAME= |
OK |
正常返回 |
ERROR |
输入格式有误 |
||
查询命令 |
AT+FTPPUTNAME? |
+FTPPUTNAME: OK |
|
测试命令 |
AT+FTPPUTNAME=? |
OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
FTP 上传文件名称 |
长度不超过 99 的 ASCII 字符串。 |
2.13 设置 FTP 上传文件路径:AT+FTPPUTPATH¶
设置将文件上传到服务器后的保存目录。
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
设置命令 |
AT+FTPPUTPATH= |
OK |
正常返回 |
ERROR |
输入格式有误 |
||
查询命令 |
AT+FTPPUTPATH? |
+FTPPUTPATH: OK |
|
测试命令 |
AT+FTPPUTPATH=? |
OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
FTP 上传文件路径 |
长度不超过 99 的 ASCII 字符串。 |
2.14 远程服务器上创建文件目录:AT+FTPMKD¶
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
执行命令 |
AT+FTPMKD |
OK +FTPMKD: 1,0 |
创建成功 |
OK +FTPMKD: 1, |
创建失败 |
||
+CME ERROR: |
如果是命令错误 |
||
测试命令 |
AT+FTPMKD=? |
OK |
|
注意事项 |
执行命令创建的 文件目录由命令A T+FTPGETPATH定义 |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
错误码 |
与 AT+FTPGET 命令的定义相同 |
2.15 远程服务器上删除文件目录:AT+FTPRMD¶
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
执行命令 |
AT+FTPRMD |
OK +FTPRMD: 1,0 |
删除成功 |
OK +FTPRMD: 1, |
删除失败 |
||
+CME ERROR: |
如果是命令错误 |
||
测试命令 |
AT+FTPRMD=? |
OK |
|
注意事项 |
执行命令删除的 文件目录由命令A T+FTPGETPATH定义 |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
错误码 |
与 AT+FTPGET 命令的定义相同 |
2.16 下载文件:AT+FTPGET¶
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
设置命令 |
AT+FTPGET=[,] |
OK |
输入AT+FTPGET=1 的返回 |
+FTPGET:2, ……..数据……….. OK |
输入: AT+FTPGET=2, 的返回 |
||
URC 上报 |
+FTPGET:1,1 |
输入 AT+FTPGET=1后,有 此上报,表示有数 据了,第一个参数 1表示为1 |
|
+FTPGET:1, |
输入AT+FTPGET= 1后,有此上报,表 示FTP下载失败,第 一个参数1表示为1 |
||
+FTPGET:1,0 |
表示 数据传输结束,第 一个参数1表示为1 |
||
测试命令 |
AT+FTPGET=? |
OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
工作模式 |
1 |
打开 FTP 会话 |
|
2 |
读入 FTP 下载数据 |
||
请求读入的数据长度 |
1~1460 |
||
确认读入的数据长度 |
1~1460 |
可能小于。0 表示没有数据可以读入。 |
|
错误码 |
61 |
网络错误 net error |
|
62 |
DNS 错误 DNS error |
||
63 |
连接错误 connect error |
||
64 |
超时 timeout |
||
65 |
服务器错误 server error |
||
66 |
操作禁止operation not allowed |
||
70 |
应答错误 reply error |
||
71 |
用户错误 user error |
||
72 |
口令错误 password error |
||
73 |
类型错误type error |
||
74 |
保持错误 rest error |
||
75 |
被动错误 passive error |
||
76 |
主动错误active error |
||
77 |
操作错误 operate error |
||
78 |
上传错误 upload error |
||
79 |
下载错误 download error |
||
80~84 |
FTP SSL 连接错误 |
||
85 |
文件错误 |
||
86 |
主动退出 |
2.17 上传文件:AT+FTPPUT¶
语法规则:
命 | 语法 令 | 类 | 型 | |
返回 |
说明 |
|
---|---|---|---|
设 | AT | OK 置 | +FTPPUT=[,] | 命 | | 令 | | |
输入AT+FTPPUT=1的返回 |
||
+FTPPUT:2, …….. //input data here OK |
输入: AT+FTPPUT=2, 的返回 |
||
OK +FTPPUT: 1,0 |
输入: AT+FTPPUT=2,0 的返回 |
||
U | + R | FTPPUT:1,1, C | 上 | 报 | |
输 入AT+FTPPUT=1后,有此上 报,表示可以上传数据了此 时通过输入AT+FTPPUT=2,上 传数据第一个参数1表示为1 |
||
+FTPPUT:1,0 |
表示数据传输会话 结束。第一个参数1表示为1 |
||
+FTPPUT:1, |
如果 =1,而且FTP会话失败。错 误码定义请参考AT+FTPGET 错误码定义 |
||
测 | AT+FTPPUT=? | OK 试 | | 命 | | 令 | | |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
FTP 上传工作模式 |
1 |
打开 FTP 会话 |
|
2 |
写 FTP 上传数据 |
||
请求上传的数据长度 |
0- |
||
确认可以上传的数据长度 |
|||
单次可以上传的最大的长度,取决于网络状态 |
2.18 下载文件(扩展):AT+FTPEXTGET¶
语法规则:
命 | 语法 令 | 类 | 型 | |
返回 |
说 明 |
|
---|---|---|---|
设 | AT+FTPEXTGET= 置 | 命 | 令 | |
OK |
当 =0 或1 |
|
AT+FTPEXTGET=, |
+FTPEXTGET:2, OK |
当 =2 |
|
AT+FTPEXTGET=,, |
+FTPEXTGET:3, …… //这里是输出到串口的数据 OK |
当 =3 |
|
查 | AT+FTPEXTGET? 询 | 命 | 令 | |
+FTPEXTGET: [,] OK |
||
测 | AT+FTPEXTGET=? 试 | 命 | 令 | |
OK |
||
U | +FTPEXTGET:1,0 R | C | 上 | 报 | |
=1且 FTPEXTGET结束,会有如此上报 |
||
+FTPEXTGET:1, |
=1且 FTPEXTGET出错,会有如此上报 。错误码定义请参考AT+FTPGET 错误码定义 |
||
+FTPEXTGET:2, |
=2 |
||
+FTPEXTGET:3, |
=3 |
||
注 | 1) 当FTPEXTPUT 意 | =1时,不可使用本命令 2) 事 | 如 项 | 果文件大小()<300KB,可以使
|
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
工作模式 |
0 |
使用缺省的FTPGET方法 |
|
1 |
使用扩展的FTPGET方法 |
||
2 |
保存下载的数据到文件中 |
||
3 |
输出下载的数据到串口 |
||
文件名 |
字符串型,最长64个字符 |
||
保存到文件的所有数据长度,用于mode 2 |
<302512 |
单位:字节 |
|
输出到串口的数据长度,用于mode 3 |
<302512 |
单位:字节 |
|
读取文件数据的起始位置,用于mode 3 |
|||
读取长度,用于mode 3 |
单位:字节 |
||
FTPEXTGET的状态 |
0 |
不在FTPEXTGET过程中 |
|
1 |
处于FTPEXTGET过程 |
||
错误码 |
与AT+FTPGET命令的定义相同 |
2.19 上传文件(扩展):AT+FTPEXTPUT¶
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
设置命令 |
AT+FTPEXTPUT=[,,,] |
OK |
当=0或1 |
+FTPEXTPUT: , …… //这里从串口输入数据 OK |
当=2 |
||
测试命令 |
AT+FTPEXTPUT=? |
OK |
|
注意事项 |
本命令的使用方法请参考本章最后一部分:使用方法举例 |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
工作模式 |
0 |
使用缺省的FTPPUT方法 |
|
1 |
使用扩展的FTPPUT方法 |
||
2 |
将数据PUT到RAM |
||
每次PUT的起始位置 |
0-300K |
单位:byte |
|
每次PUT的数据长度 |
0-300K |
单位:byte |
|
串口数据传输的超时时间 |
1000-1000000 |
单位:ms |
2.20 下载文件并保存到文件系统中:AT+FTPGETTOFS¶
语法规则:
命令类型 |
语法 |
返回 |
|
---|---|---|---|
设置命令 |
AT+FTPGETTOFS=,[,,] |
OK |
成功 |
ERROR |
失败 |
||
查询命令 |
AT+FTPGETTOFS? |
+FTPGETTOFS: [,,] OK |
|
URC上报 |
+FTPGETTOFS:0, |
如果下载成功 |
|
+FTPGETTOFS: |
如果下载失败 |
||
测试命令 |
AT+FTPGETTOFS=? |
OK |
|
注意事项 |
重连以后会断点续传 如果两次 下载都用同一个文件名, 上次下载的内容会被覆盖 |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
工作模式 |
0 |
不在FTPGETTOFS过程 |
|
1 |
处于FTPGETTOFS过程 |
||
文件保存的位置, 是ROM还是SD卡。Disk1或 Disk2可被AT+FSDRIVE获取 |
0 |
保存于ROM,文件夹 为“Disk1::raw-latex:`\ user`:raw-latex:`\ftp`” |
|
1 |
保存于SD卡,文件夹为“D isk2::raw-latex:`\ftp`” |
||
文件名 |
字符串型,最长64个字符 |
||
自动重连次数 |
0-255 |
缺省值:3 |
|
等多少秒开始自动重连 |
0-60 |
单位:秒,缺省值:5 |
|
当前 从FTP服务器GET多少数据 |
|||
当前 保存到文件系统多少数据 |
|||
总共 保存到文件系统多少数据 |
|||
错误码 |
与 AT+FTPGET命令的定义相同 |
2.21 从文件系统上传文件到服务器:AT+FTPPUTFRMFS¶
语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
执行命令 |
AT+FTPPUTFRMFS=[,,] |
OK |
查询命令 |
AT+FTPPUTFRMFS? |
+FTPPUTFRMFS: [,] OK |
测试命令 |
AT+FTPPUTFRMFS=? |
OK |
URC上报 |
+FTPPUTFRMFS:0, |
当上传结束,有此上报 |
+FTPPUTFRMFS: |
当上传出错,有此上报。 定义 请参考AT+FTPGET命令的定义 |
|
注意事项 |
自动重连后从断点开始续传 |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
文件名 |
字符串型,由数字 和字母组成,最长128字节 |
||
自动重连次数 |
0-255 |
缺省值:3 |
|
等多少秒开始自动重连 |
0-60 |
单位:秒,缺省值:5 |
|
FTP上传状态 |
0 |
不在上传状态 |
|
1 |
处于上传状态 |
||
当前从 文件系统上传了多少数据 |
单位:字节 |
||
从文 件系统共上传了多少数据 |
单位:字节 |
2.22 从文件系统加载到RAM中并用FTPPUT上传:AT+FTPFILEPUT¶
语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
设置命令 |
AT+FTPFILEPUT=[,] |
OK |
测试命令 |
AT+FTPFILEPUT=? |
OK |
注意事项 |
当FTPEXTPUT命令=1时,本命令不可用 |
2.23 获取远程服务器上文件目录:AT+FTPLIST¶
语法规则:
命 | 语法 令 | 类 | 型 | |
返回 |
|
---|---|---|
执 | AT+FTPLIST=[,] 行 | 命 | 令 | |
如果=1,则命令格式为: AT+FTPLIST=1 返回值为: OK或 +CME ERROR: |
|
如果=2,则命令格式为: AT+FTPLIST=2, 返回值为: +FTPLIST:2, ….数据… OK |
||
测 | AT+FTPLIST=? 试 | 命 | 令 | |
OK |
|
U | 输入AT+FTPLIST=1后, R | 如果是一个成功的FT C | P会话,后续会有如下的URC上报: 上 | +FTPLIST:1,1 报 | 如果是FTP数据传输
|
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
工作模式 |
1 |
打开FTP 获取文件目录会话 |
|
2 |
读取FTP 获取文件目录的数据 |
||
请求的数据的长度 |
1~1460 |
||
实际的数据长度 |
1~1460 |
||
同+FTPGET中定义 |
2.24 获取远程服务器上文件大小:AT+FTPSIZE¶
语法规则:
命令类型 |
语法 |
返回 |
说明 |
---|---|---|---|
执行命令 |
AT+FTPSIZE |
OK +FTPSIZE: 1,0, |
获取文件大小成功 |
OK +FTPSIZE: 1,,0 |
获取文件大小失败 |
||
+CME ERROR: |
如果是命令错误 |
||
测试命令 |
AT+FTPSIZE=? |
OK |
|
注意事项 |
文件由命令 AT+FTPGETNAME和A T+FTPGETPATH指定 |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
文件大小 |
单位:字节 |
||
错误码 |
与AT+FTPGET命令的定义相同 |
2.25 获取FTP状态:AT+FTPSTATE¶
语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
执行命令 |
AT+FTPSTATE |
+FTPSTATE: OK |
测试命令 |
AT+FTPSTATE=? |
OK |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
工作状态 |
0 |
Idle |
|
1 |
FTP会话进行中,包括FTPGET、FTPPUT、FTPDELE |
2.26 保存FTP应用上下文:AT+FTPSCONT¶
语法规则:
命 | 语 令 | 法 类 | 型 | |
返回 |
说明 |
|
---|---|---|---|
查 | AT+ | +FTPSCONT: +FTPSERV: | 询 | FTP | +FTPPORT: +FTPUN: +FTPPW: | 命 | SCO | +FTPCID: +FTPMODE: +FTPTYPE: | 令 | NT? | +FTPPUTOPT: +FTPREST: |
|
|||
执 | AT | OK 行 | +FT | 命 | PSC | 令 | ONT | |
将FTP 上下文保存,等模块重启后, 将自动载入上下文参数并生效 |
2.27 删除服务器上指定的文件:AT+FTPDELE¶
语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
执行命令 |
AT+FTPDELE |
OK |
测试命令 |
AT+FTPDELE=? |
OK |
URC上报 |
+FTPDELE:1,0 |
表示删除成功。 第一个参数1表示FTP会话打开 |
+FTPDELE:1, |
表示FTP文件删除失败。 错误码定义请参考AT+FTPGET 错误码定义 |
|
注意事项 |
文件由命令AT+FTP GETNAME和AT+FTPGETPATH指定 |