FTP (文件传输协议)
# 简介
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;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
---
## API说明
ftp的API在LuatOS-Air lib有做封装,建议直接用lib的API接口。
|API接口| 描述|
| --- | --- |
| ftp.close()|FTP客户端关闭|
| ftp.command()| FTP客户端命令|
| ftp.pasv_connect()| 连接到PASV接口|
| ftp.login()| FTP客户端登录|
| ftp.upload()| FTP客户端文件上传|
| ftp.download()| FTP客户端文件下载|
| ftp.checktype()| 设置FTP传输类型 A:ascii I:Binary|
| ftp.pwd()| 显示当前工作目录|
| ftp.cwd()| 更改工作目录|
| ftp.cdup()| 回到上级目录|
| ftp.mkd()| 创建目录|
| ftp.list()| 列出目录列表或文件信息|
| ftp.deletefolder()| 删除目录|
| ftp.deletefile()| 删除文件|
>详细的API介绍见 [FTP API章节](https://doc.openluat.com/wiki/21?wiki_page_id=2300"FTPAPI说明")
## 实现流程
- 登录ftp服务器
- 等待登录成功
- 执行自己的命令(根据API执行,也可使用ftp.command()执行其他ftp命令)

# 常见问题
## 关于不支持主动模式:
模块ftp默认是被动模式,不支持主动模式,无法设置主动模式,公网下要想模块正常连接服务器,服务器肯定不能设置为主动模式,否则哪家模块都不能用。
## 发送带0x0d 0x0a这些数据会丢失
需要通过ftp.checktype("I",0)设置为二进制方式传输文件,否则传输过程中会丢弃换行符