该FTP控件(FTP ActiveX OCX Control)是用Socket API实现的FTP功能客户端控件,可以在网页中上传文件,还可以在多种开发环境中使用,如VB,VC, .NET, PB,Delphi,VFP等等.
主要功能:
>>上传、下载单个/多个文件或目录,支持断点续传;
>>显示上传的进度、传输速度和剩余时间等数据;
其它特性:
>>支持2G以上大文件传输;
>>连接中断时自动检测连接并续传;
>>支持多语言
下载地址
接口API说明
|
一、属性: |
AllowType: 允许上传的文件类型;各个文件类型间以";"分隔;如:"txt;doc" |
Busy: FTP是否正在上传或下载,是返回True; |
Connected: 是否已连接成功,是返回True,否返回False; |
DenyType: 禁止上传的文件类型;各个文件类型间以";"分隔;如:"asp;aspx"; 如果某文件类型即在AllowType中也在DenyType中,则以DenyType为准,也就是判断为禁示的文件类型; |
ErrorInfo: 发生错误时的错误信息; |
ErrorNumber: 发生错误时的错误号码;点击查看错误代码列表 |
FileSize: 正在传输的文件的大小; |
KeepAliveInterval: 每隔多少秒检测与服务器的连接;单位:秒,默认30秒 |
LangInfo: 控件的提示文字信息,可以设置该属性以改变控件显示的提示信息,步骤如下: 1.从控件的FtpLibrary1.LangInfo属性获取控件所使用的文字信息; 2.把获取后的文字信息翻译为其它语言; 3.把翻译后的文字再赋给LangInfo属性,使控件显示其它语言的文字信息; 注:控件在中文系统中会自动显示为英文; |
LeftTime: 当前文件传输的剩余时间;单位:秒 |
LocalPath: 调用Upload方法时为待上传文件的路径; 调用Download方法时为下载文件的保存路径; |
MaxSpeed: 最大传输速度KB/s,V4.5.0.10版后支持; 如:MaxSpeed=100;表示最大传输为100KB/s; |
MaxSize: 在程序中设置可以传输文件的最大值;(单位:M) |
MessageInfo: 服务器端返回的消息,在事件OnServerMessage中获取; |
Overwrite: 是否覆盖;如果不覆盖则断点续传; 1:程序中没有设置该参数,则显示"文件替换对话框";  2.设置为True,所有文件都替换; 3.设置为False,所有文件都续传; 您也可以通过设置ReplaceIndex的值,操作上面的窗口; |
Passive: 是否使用被动模式传送文件,默认为True; |
Password: 登录FTP服务器的密码; |
Percent: 文件传输已完成的百分比; |
Port: FTP服务器端口,默认为21; |
QueueIndex: 当前传送文件在队列中的序号; |
QueueTotal: 传送队列中的文件总数; |
RedoTimes: 上传或下载发生错误时自动重新传输的次数; 比如参数设置为5,如果连接中断则最多尝试5次重新连接,如果连续尝试5次仍不能连接,则提示错误; |
RemotePath: 服务器端文件路径; 调用Upload时,该参数为上传后文件在服务器端的保存路径; 调用Download时,该参数为待下载的服务器端文件路径; |
RenameRule: 重命名文件的规则,默认为:"{oldname}1",表示在原文件名的基础上加1;如"test.htm"重命名后为"test1.htm"; |
ReplaceIndex: 控制"文件替换设置"窗口响应的按钮,ReplaceIndex的值为: 0:显示"文件替换对话框";  1:覆盖; 2:续传; 3:跳过; 4:重命名;(重命名规则由属性"RenameRule"指定) |
ServerName: FTP服务器名称; |
Speed: 当前传输的速度,单位:bytes/s; 可用"FormatSize(FtpLibrary1.Speed) & "/s"转换为:kb/s或mb/s |
Timeout: 超时时间间隔,默认为30秒; |
Username: 登录FTP服务器的用户名,如果为空则相当于匿名; |
Version: 显示控件的版本 |
|
二、方法: |
Abort(): 取消传输队列中所有文件的传输操作; |
AbortCurrent(): 取消传输队列中当前正在传输的文件的传输操作; |
Connect(): 连接FTP服务器;成功返回True,失败返回False; |
CreateDirectory(FolderPath,Recursive): 在FTP服务器上创建目录;成功返回True,失败返回False; FolderPath:待创建的目录路径; Recursive(可选): 是否循环创建,默认为True; |
DeleteFile(FilePath): 删除FTP服务器上的文件;成功返回True,失败返回False; FilePath:需要删除的文件路径; |
Disconnect(): 关闭连接; |
Download(): '功能:下载单个文件、多个文件、整个目录或指定目录中按通配符(只支持*和?)指定的文件;成功返回True,失败返回False; '说明: 1:下载一个文件:给RemotePath参数传要下载的文件路径; 2:下载整个目录:给RemotePath参数传要下载的目录路径,路径最后一个字符要为"\"; 3:下载多个文件/目录:RemotePath参数表示的文件路径间以"|"分隔, 每个目录路径最后一个字符要为"\";此时LocalPath可对应为多个保存路径,也可以只写一个保存所有文件的路径, 如果只有一个路径所有文件以原文件名保存到该路径下; 4:下载指定目录中按通配符指定的文件:给RemotePath参数传带通配符的路径;如:easewe\*.txt |
ExistDirectory(DirectoryName): 是否存在指定的FTP目录 DirectoryName:需要检测的目录路径; |
ExistFile(FileName): 是否存在指定的FTP文件.(只适用于V4.5.0.5或之后的版本) FileName:需要检测的文件路径; |
FormatSize(FileSize): 标准化文件大小,如果大于1M返回以M为单位的文件大小字符串,大于1KB则以KB为单位,否则以Bytes为单位; FileSize:以字节为单位的文件大小; |
FormatTime(Seconds): 格式化时间,把剩余时间格式为hh:mm:ss的形式;. Seconds:以秒为单位的时间值; 比如FormatTime(290)将返回"04:50" |
GetCurrentDirectory(): 获取FTP服务器当前的工作目录; |
GetFileExtension(FilePath): 获取某路径中文件的扩展名 FilePath:文件路径,比如: GetFileExtension("d:\test\file.txt")将返回txt; |
GetFileInfo(FilePath): 获取FTP服务器上的文件信息,返回格式为:名称*大小*时间(如:测试文件.txt*1825*2011-09-01 15:58:16) FilePath:文件路径; |
GetFileList(FolderPath): 获取FTP服务器目录的文件信息,返回格式为:0/1(目录为1,文件为0)*名称*大小*时间|.........各文件间以|分隔 ,(如:0*测试文件.txt*1825*2011-09-01 15:58:16|1*文件夹名称*0*2011-09-01 16:18:28) FolderPath:目录路径; |
GetFileName(FilePath): 获取某路径的文件名 FilePath:文件路径,比如: GetFileExtension("d:\test\file.txt")将返回file.txt; |
GetFileSize(FilePath): 获取FTP服务器上文件的大小;返回-1表示没有该文件,返回-2表示发生错误; FileName:文件路径; |
GetLocalFileCount(FolderPath): 获取客户端指定路径下所有文件的文件总数; FolderPath:目录路径; |
GetLocalFileDate(FilePath): 获取本地文件的日期; FilePath:文件路径; |
GetLocalFileSize(FilePath): 获取本地文件的大小; FilePath:文件路径; |
GetLocalFolderSize(FolderPath): 获取客户端指定路径下所有文件的文件大小; FolderPath:目录路径; |
GetParentPath(FolderPath): 获取指定目录的父目录; FolderPath:目录路径 |
LocalFileExists(FilePath): 判断本地文件是否存在,存在返回True; FilePath:本地文件路径; |
LocalFolderExists(FolderPath): 判断本地文件夹是否存在,存在返回True; FolderPath:本地目录路径; |
RemoveDirectory(FolderPath): 删除FTP服务器上的目录;成功返回True,失败返回False; FolderPath:目录路径; |
RenameFile(OldFileName,NewFileName): 重命名FTP服务器上的文件(夹);成功返回True,失败返回False; OldFileName:原文件名; NewFileName:新文件名; |
SetCurrentDirectory(FolderPath): 设置FTP服务器上的当前目录;成功返回True,失败返回False; FolderPath:目录路径; |
ShowFolderBrowserDialog(): 显示选择文件夹对话框 |
ShowOpenFileDialog(): 显示选择文件对话框; V4.6.x.x版之后不支持参数,改用以下属性来设置: 1.SFDFileName:文件对话框中默认显示的文件名; 2.SFDFilter/AllowType:可选的文件类型; 3.SFDInitialDir:初始路径; 4.SFDMultiple:是否支持多选,默认为true; 5.SFDTitle:对话框的标题; |
ShowSaveFileDialog(FileName): 显示保存文件对话框; FileName:保存时默认显示的文件名;
相关属性: 1.SFDInitialDir:初始路径; 2.SFDTitle:对话框的标题; |
Upload(): '功能:上传单个文件、多个文件、整个目录或指定目录中按通配符(只支持*和?)指定的文件;成功返回True,失败返回False; '说明: 1:上传一个文件:直接给LocalPath参数传要上传的文件路径; 2:上传整个目录:直接给LocalPath参数传要上传的目录路径,路径最后一个字符要为"\"; 3:上传多个文件/目录:LocalPath参数表示的文件路径间以"|"分隔, 每个目录路径最后一个字符要为"\";此时RemotePath可对应为多个保存路径,也可以只写一个保存所有文件的路径,如果只有一个路径所有文件以原文件名保存到该路径下; 4:上传指定目录中按通配符指定的文件:给LocalPath参数传带通配符的路径;如:c:\easewe\*.txt; |
|
三、事件: |
OnServerMessage: 服务器端返回消息时触发该事件; Private Sub FtpLibrary1_OnServerMessage() Debug.Print FtpLibrary1.MessageInfo End Sub |
OnTransfer: 传输过程中触发该事件,该事件用于显示进度,传输速度,和剩余时间等数据: Private Sub FtpLibrary1_OnTransfer() Debug.Print FtpLibrary1.Percent & "%(" & FtpLibrary1.TransferredSize& "/" & FtpLibrary1.FileSize& ")" Debug.Print FtpLibrary1.FormatSize(FtpLibrary1.Speed) & "/s" Debug.Print FtpLibrary1.FormatTime(FtpLibrary1.LeftTime) End Sub |
|
四.示例: |
连接: FtpLibrary1.ServerName ="host" FtpLibrary1.Username ="easewe" FtpLibrary1.Password ="easewe" FtpLibrary1.Port =21 If FtpLibrary1.Connect Then '连接成功 Else '连接失败(此时可以用FtpLibrary1.ErrorInfo 和 FtpLibrary1.ErrorNumber 获取错误的描述和错误号) End If |
上传单个文件: FtpLibrary1.LocalPath ="c:\easewe.txt" FtpLibrary1.RemotePath ="easewe.txt" If FtpLibrary1.Upload Then '成功 Else '失败(此时可以用FtpLibrary1.ErrorInfo 和 FtpLibrary1.ErrorNumber 获取错误的描述和错误号) End If |
上传单个目录'路径的最后一个字符必须为'\' FtpLibrary1.LocalPath ="c:\easewe\" FtpLibrary1.RemotePath ="easewe\" If FtpLibrary1.Upload Then '成功 Else '失败 End If |
上传多个文件或目录:'每个路径使用'|'分隔 FtpLibrary1.LocalPath ="c:\easewe.txt|c:\easewe1.txt|c:\easewe\" FtpLibrary1.RemotePath ="easewe\" If FtpLibrary1.Upload Then '成功 Else '失败 End If |
上传通配符指定的文件: FtpLibrary1.LocalPath ="c:\*.txt" FtpLibrary1.RemotePath ="easewe\" If FtpLibrary1.Upload Then '成功 Else '失败 End If |
下载单个文件: FtpLibrary1.RemotePath ="easewe.txt" FtpLibrary1.LocalPath ="c:\easewe.txt" If FtpLibrary1.Download Then '成功 Else '失败(此时可以用FtpLibrary1.ErrorInfo 和 FtpLibrary1.ErrorNumber 获取错误的描述和错误号) End If |
下载单个目录:'路径的最后一个字符必须为'\' FtpLibrary1.RemotePath ="easewe\" FtpLibrary1.LocalPath ="c:\easewe\" If FtpLibrary1.Download Then '成功 Else '失败 End If |
下载多个文件或目录:'每个路径使用'|'分隔 FtpLibrary1.RemotePath ="easewe.txt|easewe1.txt|easewe\" FtpLibrary1.LocalPath ="c:\easewe.txt" If FtpLibrary1.Download Then '成功 Else '失败 End If |
下载通配符指定的文件 FtpLibrary1.RemotePath ="*.txt" FtpLibrary1.LocalPath ="c:\easewe\" If FtpLibrary1.Download Then '成功 Else '失败 End If |
|
|
Javascript 示例:返回顶部 |
|
连接FTP服务器: FtpLibrary.ServerName = "server name or ip";
FtpLibrary.Username = "Username";
FtpLibrary.Password = "Password";
FtpLibrary.Port = "21";
if(FtpLibrary.Connect()){
//Connected
}else{
alert("Failed to connect to server:\n" + FtpLibrary.ErrorInfo);
}
|
上传文件: FtpLibrary.LocalPath = "c:\file.txt";
FtpLibrary.RemotePath = "file.txt";
if ( FtpLibrary.Upload() ){
alert("Finish!");
}else{
if(FtpLibrary.ErrorNumber!=16010){
alert("Failure!\n" + FtpLibrary.ErrorInfo);
}else{
alert(FtpLibrary.ErrorInfo);
}
}
|
上传目录 '最后一个字符必须为'\' FtpLibrary.LocalPath = "c:\folder\";
FtpLibrary.RemotePath = "folder\";
if ( FtpLibrary.Upload() ){
alert("Finish!");
}else{
if(FtpLibrary.ErrorNumber!=16010){
alert("Failure!\n" + FtpLibrary.ErrorInfo);
}else{
alert(FtpLibrary.ErrorInfo);
}
}
|
上传多个文件或目录: '多个文件以'|'分隔; FtpLibrary.LocalPath = "c:\file.txt|c:\folder\";
FtpLibrary.RemotePath = "folder\";
if ( FtpLibrary.Upload() ){
alert("Finish!");
}else{
if(FtpLibrary.ErrorNumber!=16010){
alert("Failure!\n" + FtpLibrary.ErrorInfo);
}else{
alert(FtpLibrary.ErrorInfo);
}
}
|
下载文件: 返回顶部 FtpLibrary.LocalPath = "c:\file.txt";
FtpLibrary.RemotePath = "file.txt";
if ( FtpLibrary.Download() ){
alert("Finish!");
}else{
if(FtpLibrary.ErrorNumber!=16010){
alert("Failure!\n" + FtpLibrary.ErrorInfo);
}else{
alert(FtpLibrary.ErrorInfo);
}
}
|
下载目录: '最后一个字符必须为'\' FtpLibrary.LocalPath = "c:\folder\";
FtpLibrary.RemotePath = "folder\";
if ( FtpLibrary.Download() ){
alert("Finish!");
}else{
if(FtpLibrary.ErrorNumber!=16010){
alert("Failure!\n" + FtpLibrary.ErrorInfo);
}else{
alert(FtpLibrary.ErrorInfo);
}
}
|
下载多个文件或目录: FtpLibrary.LocalPath = "c:\folder\";
FtpLibrary.RemotePath = "file.txt|folder\";
if ( FtpLibrary.Download() ){
alert("Finish!");
}else{
if(FtpLibrary.ErrorNumber!=16010){
alert("Failure!\n" + FtpLibrary.ErrorInfo);
}else{
alert(FtpLibrary.ErrorInfo);
}
}
|
显示传输进度: //--copy to event OnTransfer of FtpLibrary
var percent = FtpLibrary.Percent;
var speed = FtpLibrary.FormatSize(FtpLibrary.Speed)+"/s";
var remainingtime = FtpLibrary.FormatTime(FtpLibrary.LeftTime);
|
获取文件大小和时间: var fileinfo=FtpLibrary.GetFileInfo("file.txt");
if(fileinfo!=""){
var aryItem = new Array();
aryItem = fileinfo.split("*");
alert(aryItem[0] + "<" + FtpLibrary.FormatSize(aryItem[1]) + "," + aryItem[2] + ">");
}else{
if(FtpLibrary.ErrorNumber==0){
alert("File Not found!");
}else{
alert(FtpLibrary.ErrorInfo);
}
}
|
获取目录列表:返回顶部 var filelist = FtpLibrary.GetFileList("folder name");
var aryFiles = new Array(); var aryItem = new Array();
aryFiles = filelist.split("|");
if (aryFiles.length > 0) {
var count = aryFiles.length; var fileCount = 0, folderCount = 0;
var fileInfo = "";
for (var i = 0; i < count; i++) {
if (aryFiles[i].substr(0, 1) == "1") {
folderCount++;
aryItem = aryFiles[i].split("*");
fileInfo += aryItem[1];
fileInfo += "\n";
}
}
for (var i = 0; i < count; i++) {
if (aryFiles[i].substr(0, 1) == "0") {
fileCount++;
aryItem = aryFiles[i].split("*");
fileInfo += aryItem[1];
fileInfo += " <" + FtpLibrary.FormatSize(aryItem[2]);
fileInfo += " , " + aryItem[3] + ">";
fileInfo += "\n";
}
}
//--
if (folderCount > 0 && fileCount > 0) {
fileInfo = folderCount + " folder(s), " + fileCount + " file(s):\n----------------------------\n" + fileInfo;
} else {
if (folderCount > 0) fileInfo = folderCount + " folder(s):\n----------------------------\n" + fileInfo;
if (fileCount > 0) fileInfo = fileCount + " file(s):\n----------------------------\n" + fileInfo;
}
//--
alert(fileInfo);
} else {
if (FtpLibrary.ErrorNumber == 0) {
alert("Empty directory!");
} else {
alert(FtpLibrary.ErrorInfo);
}
} |