31 KiB
Object - FTP 文件传输
FTP
声明:class
用于连接和登录 FTP 服务器,并管理远程目录、传输文件及发送服务器命令
下列范例使用本机 127.0.0.1:42121 的临时 FTP 测试服务
测试账号为 tsl_user 和 tsl_pass,测试结束后应清空服务根目录
create()
声明:function
无参数构造函数。创建 FTP 实例,连接参数由实例属性设置
可见性:public
create(host)
声明:function
构造函数。按 host 配置名称读取连接参数并自动连接和登录服务器
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
host |
string | FTP 配置名称。指定后从配置文件读取连接参数并自动连接和登录服务器 |
abort()
声明:function
终止连接
可见性:public
返回:any
示例
obj := new FTP();
obj.host := "127.0.0.1";
obj.port := 42121;
obj.username := "tsl_user";
obj.password := "tsl_pass";
obj.passive := true;
obj.connect();
obj.login();
echo obj.abort(), "\n";
// 输出:0
changeDir(a_dir_name)
声明:function
改变FTP服务器上的当前目录
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
a_dir_name |
string | string,字符串类型,要切换到的目录 |
返回:any
示例
obj := new FTP();
obj.host := "127.0.0.1";
obj.port := 42121;
obj.username := "tsl_user";
obj.password := "tsl_pass";
obj.passive := true;
obj.connect();
obj.login();
obj.makeDir("tsl-change-dir");
echo obj.changeDir("tsl-change-dir"), "\n";
echo obj.retrieveCurrentDir, "\n";
obj.changeDirUp();
obj.removeDir("tsl-change-dir");
obj.abort();
// 输出:
// 0
// /tsl-change-dir/
changeDirUp()
声明:function
切换到FTP服务器上当前目录的父目录
可见性:public
返回:any
示例
obj := new FTP();
obj.host := "127.0.0.1";
obj.port := 42121;
obj.username := "tsl_user";
obj.password := "tsl_pass";
obj.passive := true;
obj.connect();
obj.login();
obj.makeDir("tsl-change-dir-up");
obj.changeDir("tsl-change-dir-up");
echo obj.changeDirUp(), "\n";
echo obj.retrieveCurrentDir, "\n";
obj.removeDir("tsl-change-dir-up");
obj.abort();
// 输出:
// 0
// /
connect()
声明:function
打开FTP连接
可见性:public
返回:any
示例
obj := new FTP();
obj.host := "127.0.0.1";
obj.port := 42121;
obj.username := "tsl_user";
obj.password := "tsl_pass";
obj.passive := true;
echo obj.connect(), "\n";
obj.abort();
// 输出: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
示例
filename := "/data/workspace/tmp/tsl-ftp-delete.txt";
pos := 0;
writeFile(rwRaw(), "", filename, pos, 5, "hello");
source := new TMemoryStream();
source.loadFromFile("", filename);
source.position := 0;
obj := new FTP();
obj.host := "127.0.0.1";
obj.port := 42121;
obj.username := "tsl_user";
obj.password := "tsl_pass";
obj.passive := true;
obj.connect();
obj.login();
obj.put(source, "tsl-ftp-delete.txt", false);
echo obj.delete("tsl-ftp-delete.txt"), "\n";
obj.abort();
fileDelete("", filename);
// 输出:0
disconnectNotifyPeer()
声明:function
断开并且通知服务器
可见性:public
返回:any
fileDate(file_name, s_gmt)
声明:function
获取FTP服务器上文件的修改时间
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
file_name |
string | 字符串类型,指定要获得修改时间的文件的名称 |
s_gmt |
boolean | 布尔类型,指定返回的时间是否为格林尼治时间标准时间 |
返回:datetime
示例
filename := "/data/workspace/tmp/tsl-ftp-date.txt";
pos := 0;
writeFile(rwRaw(), "", filename, pos, 5, "hello");
source := new TMemoryStream();
source.loadFromFile("", filename);
source.position := 0;
obj := new FTP();
obj.host := "127.0.0.1";
obj.port := 42121;
obj.username := "tsl_user";
obj.password := "tsl_pass";
obj.passive := true;
obj.connect();
obj.login();
obj.put(source, "tsl-ftp-date.txt", false);
echo obj.fileDate("tsl-ftp-date.txt", false) > 0, "\n";
obj.delete("tsl-ftp-date.txt");
obj.abort();
fileDelete("", filename);
// 输出:1
get(source_file, dest, resume)
声明:function
获取从FTP服务器上下载文件
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
source_file |
string | 执行FTP上要下载的源文件名称 |
dest |
TSLObj | TStream类型,下载文件的目标流对象。参考 TFileStream对象 |
resume |
boolean | 当设置为真实支持断点续传,否则重新下载文件 |
返回:any
示例
source_file := "/data/workspace/tmp/tsl-ftp-get-source.txt";
dest_file := "/data/workspace/tmp/tsl-ftp-get-dest.txt";
pos := 0;
writeFile(rwRaw(), "", source_file, pos, 5, "hello");
source := new TMemoryStream();
source.loadFromFile("", source_file);
source.position := 0;
obj := new FTP();
obj.host := "127.0.0.1";
obj.port := 42121;
obj.username := "tsl_user";
obj.password := "tsl_pass";
obj.passive := true;
obj.connect();
obj.login();
obj.put(source, "tsl-ftp-get.txt", false);
dest := new TMemoryStream();
echo obj.get("tsl-ftp-get.txt", dest, false), "\n";
dest.position := 0;
dest.saveToFile("", dest_file);
obj.delete("tsl-ftp-get.txt");
obj.abort();
echo fileExists("", dest_file), "\n";
fileDelete("", source_file);
fileDelete("", dest_file);
// 输出:
// 0
// 1
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 服务器当前目录中匹配 specifier 的文件或目录
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
dest |
TStringList | 接收文件或目录列表的字符串列表 |
specifier |
string | 当前目录下的目录名称、文件名或通配符,例如 *.txt |
details |
boolean | 是否返回包含大小、修改时间和权限等信息的详细列表 |
返回:any
示例
filename := "/data/workspace/tmp/tsl-ftp-list.txt";
pos := 0;
writeFile(rwRaw(), "", filename, pos, 5, "hello");
source := new TMemoryStream();
source.loadFromFile("", filename);
source.position := 0;
obj := new FTP();
obj.host := "127.0.0.1";
obj.port := 42121;
obj.username := "tsl_user";
obj.password := "tsl_pass";
obj.passive := true;
obj.connect();
obj.login();
obj.put(source, "tsl-ftp-list.txt", false);
files := new TStringList();
obj.list(files, "*.txt", true);
echo files.count > 0, "\n";
obj.delete("tsl-ftp-list.txt");
obj.abort();
fileDelete("", filename);
// 输出:1
login()
声明:function
提供FTP连接的验证,此前必须制定Username和Password属性
可见性:public
返回:any
示例
obj := new FTP();
obj.host := "127.0.0.1";
obj.port := 42121;
obj.username := "tsl_user";
obj.password := "tsl_pass";
obj.passive := true;
obj.connect();
echo obj.login(), "\n";
echo obj.retrieveCurrentDir, "\n";
obj.abort();
// 输出:
// 0
// /
makeDir(dir_name)
声明:function
在FTP服务器上创建目录
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
dir_name |
string | 字符串类型,要创建的目录名称 |
返回:any
示例
obj := new FTP();
obj.host := "127.0.0.1";
obj.port := 42121;
obj.username := "tsl_user";
obj.password := "tsl_pass";
obj.passive := true;
obj.connect();
obj.login();
echo obj.makeDir("tsl-make-dir"), "\n";
obj.removeDir("tsl-make-dir");
obj.abort();
// 输出:0
noop()
声明:function
向FTP服务器发送一个KEEP-ALIVE信号。服务器在长时间处于空闲状态下,使用NOOP方法可以防止服务器关闭连接
可见性:public
返回:any
put(source, dest_file, append)
声明:function
上传文件到FTP服务器
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
source |
TStream | 流对象类型,包含要上传的数据 |
dest_file |
string | 字符串类型,远程服务器的目标文件名 |
append |
boolean | 布尔类型,为真时,服务器将上传到数据从已存在的文件末尾写入 |
返回:any
示例
filename := "/data/workspace/tmp/tsl-ftp-put.txt";
pos := 0;
writeFile(rwRaw(), "", filename, pos, 5, "hello");
source := new TMemoryStream();
source.loadFromFile("", filename);
source.position := 0;
obj := new FTP();
obj.host := "127.0.0.1";
obj.port := 42121;
obj.username := "tsl_user";
obj.password := "tsl_pass";
obj.passive := true;
obj.connect();
obj.login();
echo obj.put(source, "tsl-ftp-put.txt", false), "\n";
obj.delete("tsl-ftp-put.txt");
obj.abort();
fileDelete("", filename);
// 输出:0
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
示例
obj := new FTP();
obj.host := "127.0.0.1";
obj.port := 42121;
obj.username := "tsl_user";
obj.password := "tsl_pass";
obj.passive := true;
obj.connect();
obj.login();
obj.makeDir("tsl-remove-dir");
echo obj.removeDir("tsl-remove-dir"), "\n";
obj.abort();
// 输出:0
rename(source_file, dest_file)
声明:function
重命名FTP服务器指定文件
可见性:public
| 参数 | 类型 | 说明 |
|---|---|---|
source_file |
string | 字符串类型,源文件名 |
dest_file |
string | 字符串类型,新文件名 |
返回:any
示例
filename := "/data/workspace/tmp/tsl-ftp-rename.txt";
pos := 0;
writeFile(rwRaw(), "", filename, pos, 5, "hello");
source := new TMemoryStream();
source.loadFromFile("", filename);
source.position := 0;
obj := new FTP();
obj.host := "127.0.0.1";
obj.port := 42121;
obj.username := "tsl_user";
obj.password := "tsl_pass";
obj.passive := true;
obj.connect();
obj.login();
obj.put(source, "tsl-ftp-old.txt", false);
echo obj.rename("tsl-ftp-old.txt", "tsl-ftp-new.txt"), "\n";
obj.delete("tsl-ftp-new.txt");
obj.abort();
fileDelete("", filename);
// 输出:0
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
示例
filename := "/data/workspace/tmp/tsl-ftp-size.txt";
pos := 0;
writeFile(rwRaw(), "", filename, pos, 5, "hello");
source := new TMemoryStream();
source.loadFromFile("", filename);
source.position := 0;
obj := new FTP();
obj.host := "127.0.0.1";
obj.port := 42121;
obj.username := "tsl_user";
obj.password := "tsl_pass";
obj.passive := true;
obj.connect();
obj.login();
obj.put(source, "tsl-ftp-size.txt", false);
echo obj.size("tsl-ftp-size.txt"), "\n";
obj.delete("tsl-ftp-size.txt");
obj.abort();
fileDelete("", filename);
// 输出:5
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