# Object - FTP 文件传输 ## `FTP` 声明:class 用于连接和登录 FTP 服务器,并管理远程目录、传输文件及发送服务器命令 ### `create(host)` 声明:function 创建 FTP 实例 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `host` | string | 可选。字符串类型。如果指定了Host参数,会自动从配置文件中获取对应设置,自动连接并登录服务器 | ### `abort()` 声明:function 终止连接 可见性:public 返回:any #### 示例 ```tsl obj := CreateObject("FTP"); obj.host := "ftp.tinysoft.com.cn"; obj.port := 20; obj.username := username; obj.password := password; obj.connect();//连接服务器 obj.login();//登录服务器 return obj.Abort(); //终止连接成功,返回0 ``` ### `changeDir(a_dir_name)` 声明:function 改变FTP服务器上的当前目录 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `a_dir_name` | string | string,字符串类型,要切换到的目录 | 返回:any #### 示例 ```tsl obj := CreateObject("FTP"); obj.host := "ftp.tinysoft.com.cn"; obj.port := 20; obj.username := username; obj.password := password; obj.connect();//连接 obj.login();//登录 obj.changedir('/test');//将FTP服务器上的当前目录更改为"/test" return obj.RetrieveCurrentDir(); //修改成功,当前目录应为"/test" ``` ### `changeDirUp()` 声明:function 切换到FTP服务器上当前目录的父目录 可见性:public 返回:any #### 示例 ```tsl obj := CreateObject("FTP"); obj.host := "ftp.tinysoft.com.cn"; obj.port := 20; obj.username := username; obj.password := password; obj.connect();//连接 obj.login();//登录 obj.changedir('/test');//将FTP服务器上的当前目录更改为"/test" obj.changeDirUp();//跳转到当前目录的上一级目录"/" return obj.RetrieveCurrentDir(); //跳转成功,当前目录应为"/" ``` ### `connect()` 声明:function 打开FTP连接 可见性:public 返回:any #### 示例 ```tsl obj := CreateObject("FTP"); obj.host := "ftp.tinysoft.com.cn"; obj.port := 20; obj.username := username; obj.password := password; return obj.connect(); //连接成功,返回0 ``` ### `crc(file_name, start_point, end_point)` 声明:function 计算FTP服务器上指定文件的CRC值。需要FTP服务器支持XCRC功能 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `file_name` | string | 字符串类型,指定的文件名 | | `start_point` | int64 | 整数类型,计算CRC值的文件其实位置,默认为0 | | `end_point` | int64 | 整数类型,计算CRC值的文件末尾位置,默认为0,当指定为0时,EndPoint认为是文件长度 | 返回:int64 ### `delete(file_name)` 声明:function 删除FTP服务器上的文件 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `file_name` | string | 字符串类型,指定要删除的文件的名称 | 返回:any #### 示例 ```tsl obj := CreateObject("FTP"); obj.host := "ftp.tinysoft.com.cn"; obj.port := 20; obj.username := username; obj.password := password; //连接FTP服务器 obj.connect(); //登录 obj.Login(); //删除Test.txt文件 obj.delete("Test.txt"); //验证文件是否被删除 return obj.FileDate("Test.txt",0); //获取文件时间,若无该文件,返回0 ``` ### `disconnectNotifyPeer()` 声明:function 断开并且通知服务器 可见性:public 返回:any ### `fileDate(file_name, s_gmt)` 声明:function 获得FTP服务器上文件的修改时间 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `file_name` | string | 字符串类型,指定要获得修改时间的文件的名称 | | `s_gmt` | boolean | 布尔类型,指定返回的时间是否为格林尼治时间标准时间 | 返回:datetime #### 示例 ```tsl obj := CreateObject("FTP"); obj.host := "ftp.tinysoft.com.cn"; obj.port := 20; obj.username := username; obj.password := password; //连接FTP服务器 obj.connect(); //登录 obj.Login(); ret:= obj.FileDate("Test.txt",0); return DateTimeToStr(ret); //"2024-07-31 14:28:00" ``` ### `get(source_file, dest, resume)` 声明:function 从FTP服务器上下载文件 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `source_file` | string | 执行FTP上要下载的源文件名称 | | `dest` | TSLObj | TStream类型,下载文件的目标流对象。参考 TFileStream对象 | | `resume` | boolean | 当设置为真实支持断点续传,否则重新下载文件 | 返回:any #### 示例 ```tsl obj := CreateObject("FTP"); obj.host := "ftp.tinysoft.com.cn"; obj.port := 20; obj.username := username; obj.password := password; //连接FTP服务器 obj.connect(); //登录 obj.Login(); obj.TryNATFastTrack := 1; //下载文件 st := new TFileStream("","D:\\test\\1.txt",65535); obj.get("FtpTest.txt",st,0); //若下载成功,可在本机对应位置查看文件 ``` ### `help(help_contents, command)` 声明:function 获得FTP服务器命令以及其他帮助信息,使用FTP的HELP命令。必须在登陆连接后才可以使用Help函数 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `help_contents` | TStringList | 字符串类型,用于返回服务器的执行状态信息 | | `command` | string | 可选。字符串类型,用于请求具体的命令的帮助信息,如HELP SITE | 返回:any ### `isServerMDTZAndListTForm()` 声明:function 指出FTP服务器是否支持FTP MDTM和LIST-T 命令 可见性:public 返回:boolean ### `list(dest, specifier, details)` 声明:function 从FTP服务器上下载文件 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `dest` | TStringList | 字符串列表类型,当前目录的文件和目录列表 | | `specifier` | string | 字符串类型,当前目录下的目录名称或要列出的文件通配符(如’*.*’,’A.txt’等) | | `details` | boolean | 布尔类型,是否返回详细的列表信息,包括文件大小,修改日期和文件所有者权限,组等 | 返回:any #### 示例 ```tsl obj := CreateObject("FTP"); obj.host := "ftp.tinysoft.com.cn"; obj.port := 20; obj.username := username; obj.password := password; //连接FTP服务器 obj.connect(); //登录 obj.Login(); AFiles := new TStringList(); //获取当前目录所有.txt文件信息 obj.List(AFiles,'*.txt',true); return AFiles.GetText(); //字符串: "-rw-r--r-- 1 1001 1001 17 Apr 09 16:07 test01.txt -rw-r--r-- 1 1001 1001 0 Sep 16 2023 test02.txt -rw-r--r-- 1 1001 1001 38 Jul 25 17:26 test03.txt" ``` ### `login()` 声明:function 提供FTP连接的验证,此前必须制定Username和Password属性 可见性:public 返回:any #### 示例 ```tsl obj := CreateObject("FTP"); obj.host := "ftp.tinysoft.com.cn"; obj.port := 20; obj.username := username; obj.password := password; //连接FTP服务器 obj.connect(); //登录 obj.Login(); return obj.RetrieveCurrentDir(); //获取当前所在目录,若登录成功,则返回"/" ``` ### `makeDir(dir_name)` 声明:function 在FTP服务器上创建目录 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `dir_name` | string | 字符串类型,要创建的目录名称 | 返回:any #### 示例 ```tsl obj := CreateObject("FTP"); obj.host := "ftp.tinysoft.com.cn"; obj.port := 20; obj.username := username; obj.password := password; //连接FTP服务器 obj.connect(); //登录 obj.Login(); obj.MakeDir("newDir"); //若创建成功,可在服务器中查看或使用FAQ:List 查看 ``` ### `noop()` 声明:function 向FTP服务器发送一个KEEP-ALIVE信号。服务器在长时间处于空闲状态下,使用NOOP方法可以防止服务器关闭连接 可见性:public 返回:any ### `put(source, dest_file, append)` 声明:function 上传文件到FTP服务器 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `source` | TStream | 流对象类型,包含要上传的数据 | | `dest_file` | string | 字符串类型,远程服务器的目标文件名 | | `append` | boolean | 布尔类型,为真时,服务器将上传到数据从已存在的文件末尾写入 | 返回:any #### 示例 ```tsl obj := CreateObject("FTP"); obj.host := "ftp.tinysoft.com.cn"; obj.port := 20; obj.username := username; obj.password := password; //连接FTP服务器 obj.connect(); //登录 obj.Login(); //构造TStream对象 filepath := "D:\\test\\Test.txt"; st := new TMemoryStream(); st.LoadFromFile("",filepath); obj.Put(st,"put.txt",false); //若上传成功,可在服务器中查看或使用FAQ:Get 下载后在本机查看 ``` ### `quit()` 声明:function 关闭FTP客户端连接。Quit用于文件未传输时关闭连接,如果一个文件传输进程正在进行,请优先使用Abort() 可见性:public 返回:any ### `quote(command)` 声明:function 用于执行在这个类中未实现的FTP命令 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `command` | string | 字符串类型,要执行的FTP命令 | 返回:integer ### `reInitialize(delay)` 声明:function 清除FTP客户端的账户及其设置信息 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `delay` | integer | 整数类型,延后时间 | 返回:integer ### `removeDir(dir_name)` 声明:function 移除FTP服务器上的目录 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `dir_name` | string | 字符串类型,FTP服务器上要移除的目录名称 | 返回:any #### 示例 ```tsl obj := CreateObject("FTP"); obj.host := "ftp.tinysoft.com.cn"; obj.port := 20; obj.username := username; obj.password := password; //连接FTP服务器 obj.connect(); //登录 obj.Login(); obj.Remove("testDir"); //若删除成功,可在服务器中查看或使用FAQ:List 查看 ``` ### `rename(source_file, dest_file)` 声明:function 重命名FTP服务器指定文件 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `source_file` | string | 字符串类型,源文件名 | | `dest_file` | string | 字符串类型,新文件名 | 返回:any #### 示例 ```tsl obj := CreateObject("FTP"); obj.host := "ftp.tinysoft.com.cn"; obj.port := 20; obj.username := username; obj.password := password; //连接FTP服务器 obj.connect(); //登录 obj.Login(); obj.rename("testDir","newDir"); //若重命名成功,可在服务器中查看或使用FAQ:List 查看 ``` ### `resumeSupported()` 声明:function 指出服务器上是否支持REST命令 可见性:public 返回:boolean ### `setCmdOpt(cmd, options)` 声明:function 指定一个在FTP命令之后的行为 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `cmd` | string | 字符串类型,受到Options影响的命令 | | `options` | string | 字符串类型,应用于FTP 会话的选项 | 返回:any ### `setLang(lang_tag)` 声明:function 请求以指定的语言返回响应的内容 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `lang_tag` | string | 字符串类型,FTP客户端的语言标记 | 返回:any ### `setModTime(file_name, local_time)` 声明:function 设置指定文件的最后修改时间 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `file_name` | string | 字符串类型,服务器上更新的文件名 | | `local_time` | datetime | 时间类型,指定文件修改的时间值 | 返回:any ### `setModTimeGMT(file_name, gmt_time)` 声明:function 设置指定文件的最后修改时间 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `file_name` | string | 字符串类型,服务器上更新的文件名 | | `gmt_time` | datetime | 时间类型,指定文件修改的时间值 | 返回:any ### `site(command)` 声明:function 发送一个FTP服务器端的命令 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `command` | string | 字符串类型,FTP服务器端命令名称。常常用来发发送没有包含在FTP协议中的服务器端命令。可以用HELP SITE命令查找指定FTP服务器的命令和语法信息 | 返回:any ### `size(file_name)` 声明:function 获得服务器上文件的大小信息 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `file_name` | any | file_name | 返回:int64 #### 示例 ```tsl obj := CreateObject("FTP"); obj.host := "ftp.tinysoft.com.cn"; obj.port := 20; obj.username := username; obj.password := password; //连接FTP服务器 obj.connect(); //登录 obj.Login(); return obj.Size("test.txt"); //整数,18 ``` ### `status(status_list)` 声明:function 实现FTP的STAT命令 可见性:public | 参数 | 类型 | 说明 | | --- | --- | --- | | `status_list` | TStringList | 字符串列表类型,服务器响应的连接、传输参数等状态 | 返回:any ### `Account` 声明:property 代表连接到远程FTP服务器的账户信息 可见性:public 类型:string 访问:read/write ### `AUTHCmd` 声明:property 表示登陆验证时使用的机制。这个属性的值决定在TSL握手协议中与FTP AUTH命令交换时使用的参数 可见性:public 类型:TAuthCmd 访问:read/write ### `AutoIssueFEAT` 声明:property 是否自动发送FEAT指令获得所支持的命令 可见性:public 类型:boolean 访问:read/write ### `AutoLogin` 声明:property 指定当使用Connect方法与FTP服务器建立会话时,FTP客户端是否自动连接 可见性:public 类型:boolean 访问:read/write ### `CanResume` 声明:property 表示服务器是否支持续传操作 可见性:public 类型:boolean 访问:read ### `CurrentTransferMode` 声明:property 表示当前FTP数据交换中有效的传输模式设置 可见性:public 类型:any 访问:read/write ### `DataPort` 声明:property 与客户端会话的数据通道绑定的端口号 可见性:public 类型:integer 访问:read/write ### `DataPortMax` 声明:property FTP客户端数据通道的端口号上限 可见性:public 类型:integer 访问:read/write ### `DataPortMin` 声明:property FTP客户端数据通道的端口号下限 可见性:public 类型:integer 访问:read/write ### `DirFormat` 声明:property 表示目录列表结构 可见性:public 类型:string 访问:read ### `ExternalIP` 声明:property 指定当客户端在一个NAT防火墙后发送PORT或者EPRT命令时使用的IP地址 可见性:public 类型:string 访问:read/write ### `Host` 声明:property 表示FTP服务器的IP地址或者主机名称 可见性:public 类型:string 访问:read/write ### `LangsSupported` 声明:property 返回服务器支持的语言列表 可见性:public 类型:TStringList 访问:read ### `LastCmdResult` 声明:property 最后一条命令的返回结果,包括命令返回状态字以及结果 可见性:public 类型:TStringList 访问:read ### `ListenTimeout` 声明:property 侦听成功的超时时间 可见性:public 类型:integer 访问:read/write ### `ListResult` 声明:property 最后一条LIST命令的返回 可见性:public 类型:TStringList 访问:read ### `Passive` 声明:property 指定FTP的数据通道连接方法,如果为真则采用被动模式 可见性:public 类型:boolean 访问:read/write ### `PassiveUseControlHost` 声明:property 如果设置为假,被动模式下依旧使用FTP的HOST属性,如果为真,则使用被动连接过来的对端IP地址。简单来说,如果设置为真,则允许分布式FTP服务,也就是对端可能是多个IP地址的FTP来发送或者接受数据 可见性:public 类型:boolean 访问:read/write ### `Password` 声明:property 登陆FTP服务器时用于认证的凭据 可见性:public 类型:string 访问:read/write ### `Port` 声明:property 用于在打开连接时用到的远程FTP服务器主机上指定的端口号 可见性:public 类型:integer 访问:read/write ### `ProxyHost` 声明:property FTP代理的主机IP或名称 可见性:public 类型:string 访问:read/write ### `ProxyPassword` 声明:property FTP代理服务器的登陆密码 可见性:public 类型:string 访问:read/write ### `ProxyPort` 声明:property FTP代理服务器的端口号 可见性:public 类型:integer 访问:read/write ### `ProxyType` 声明:property 指定连接代理服务器时使用的方法。 0:使用代理服务器的CONNECT命令直接连接 1:采用USER命令,发送USER user@hostname串进行登录。 2:登录时发送SITE命令 3:发送OPEN命令 4:使用USER,PASS命令发送代理服务器的用户名密码,发送USER user@firewalluser@hostname 和 PASS pass@firewallpass 5:先使用USER,PASS命令使用代理服务器的用户名密码,穿透代理服务器,然后使用目标的用户名和密码 6:采用USER hostuserId@hostname firewallUsername模式。 7: Novell BorderManager Proxy 可见性:public 类型:integer 访问:read/write ### `ProxyUsername` 声明:property FTP代理服务器的登陆用户名 可见性:public 类型:string 访问:read/write ### `ReadTimeout` 声明:property 客户端等待FTP连接响应时间的毫秒数 可见性:public 类型:integer 访问:read/write ### `RetrieveCurrentDir` 声明:property 获得服务器上当前目录的名称 可见性:public 类型:string 访问:read/write ### `SupportsVerification` 声明:property 表示FTP服务器是否支持完整性验证的扩展功能 可见性:public 类型:boolean 访问:read ### `SystemDesc` 声明:property 远程FTP服务器的操作系统的描述信息 可见性:public 类型:string 访问:read ### `TransferMode` 声明:property 实现FTP的MODE命令,设置FTP的传输模式,0为非压缩格式,1为压缩格式 可见性:public 类型:integer 访问:read/write ### `TransferTimeout` 声明:property FTP客户端在数据通道进行读操作时的等待时间的毫秒数 可见性:public 类型:integer 访问:read/write ### `TransferType` 声明:property 指定传输类型,包括Binary(0)和ASCII(1),默认使用Binary方式进行传输 可见性:public 类型:integer 访问:read/write ### `TryNATFastTrack` 声明:property 指定是否使用“快速路径”连接穿越防火墙和地址转换器(NAT) 可见性:public 类型:any 访问:read/write ### `UseCCC` 声明:property 表示FTP客户端是否需要使用清除通道命令(CCC) 可见性:public 类型:boolean 访问:read/write ### `UseExtensionDataPort` 声明:property 指示在数据交换时是否使用了额外的IPV6端口以及是否设置为PASV模式 可见性:public 类型:boolean 访问:read/write ### `UseMLIS` 声明:property 指定当客户端试图获得目录列表时是否使用应该使用FTP的MLST或MLSD命令 可见性:public 类型:boolean 访问:read/write ### `Username` 声明:property 登陆FTP服务器时使用的身份验证ID 可见性:public 类型:string 访问:read/write ### `UseSTARTTLS` 声明:property 是否使用显式 TLS(即 STARTTLS 加密协议) 可见性:public 类型:boolean 访问:read/write ### `UseTLS` 声明:property 用于指定传输安全等级 可见性:public 类型:boolean 访问:read/write ### `UsingExtDataPort` 声明:property 表示客户端会话是否支持RFC 2428 NAT 扩展 可见性:public 类型:boolean 访问:read ### `UsingNATFastTrack` 声明:property 表示客户端会话是否使用了“快速路径”连接 可见性:public 类型:boolean 访问:read ### `UsingSFTP` 声明:property 表示客户端会话是否使用了安全FTP连接 可见性:public 类型:any 访问:read