dsqzhaoyue 发表于 2015-5-26 12:52:10

FTP上传下载控件

  该FTP控件(FTP ActiveX OCX Control)是用Socket API实现的FTP功能客户端控件,可以在网页中上传文件,还可以在多种开发环境中使用,如VB,VC, .NET, PB,Delphi,VFP等等.
主要功能:
>>上传、下载单个/多个文件或目录,支持断点续传;
>>显示上传的进度、传输速度和剩余时间等数据;
其它特性:
>>支持2G以上大文件传输;
>>连接中断时自动检测连接并续传;
>>支持多语言
  下载地址
  
  接口API说明












一、属性:



AllowType(允许的文件类型)



Busy(是否正忙)


Connected(是否已连接成功


ErrorInfo(发生错误时的错误信息)


ErrorNumber(发生错误时的错误号码)


DenyType(禁止的文件类型)



FileSize(正在传输的文件大小)



KeepAliveInterval(检测连接秒数)



LangInfo(控件文字信息)



LeftTime(当前传输的剩余时间)



LocalPath(客户端文件路径)



MaxSize(允许传输文件的最大字节)



MaxSpeed(最大传输速度KB/S)



MessageInfo(FTP服务器返回的消息)



Overwrite(是否续传)



Passive(是否使用被动模式)



Password(登录服务器的密码)



Percent(当前传输进度)



Port(服务器端口)



QueueIndex(队列序号)



QueueTotal(队列文件总数)



RedoTimes(连接中断后重新传输的次数)



RemotePath(服务器端文件路径)



RenameRule(重命名文件规则)



ReplaceIndex("文件替换设置")



ServerName(服务器地址)



Speed(传输速度)



Timeout(超时时间)



TransferredSize(已传输文件大小)



Username(登录服务器用户名)



Version(控件版本)









二、方法:


Abort(取消所有文件上传)


AbortCurrent(取消当前文件上传)



Connect(连接到服务器)



CreateDirectory(在服务器创建目录)



DeleteFile(删除服务器上的文件)



Disconnect(关闭连接)



Download(下载文件)



ExistDirectory(检测FTP目录是否存在)



ExistFile(检测FTP文件是否存在)



FormatSize(格式化文件大小)



FormatTime(格式化时间)



GetCurrentDirectory(获取服务器工作目录)



GetFileExtension(获取文件扩展名)



GetFileInfo(获取服务器端文件信息)



GetFileList(获取服务器端目录信息)



GetFileName(获取文件名称)



GetFileSize(获取服务器端文件大小)



GetLocalFileCount(获取客户端指定目录下的文件总数)



GetLocalFileDate(获取客户端文件日期)



GetLocalFileSize(获取客户端文件大小)



GetLocalFolderSize(获取客户端目录文件大小)



GetParentPath(获取父目录)



LocalFileExists(检测客户端文件是否存在)



LocalFolderExists(检测客户端目录是否存在)



RemoveDirectory(删除服务器端目录)



RenameFile(重命名服务器端文件或目录)



SetCurrentDirectory(设置服务器端当前目录)



ShowFolderBrowserDialog(显示选择文件夹对话框)



ShowOpenFileDialog(显示选择文件对话框)



ShowSaveFileDialog(显示保存文件对话框)



Upload(上传文件)









三、事件:


OnServerMessage(服务器端返回消息时触发)



OnTransfer(传输文件过程中触发)



四.示例:



连接


上传单个文件



上传单个目录


上传多个文件或目录



上传通配符指定的文件



下载单个文件


下载单个目录



下载多个文件或目录



下载通配符指定的文件


设置控件的提示文字信息















一、属性:


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:程序中没有设置该参数,则显示"文件替换对话框";
http://www.iyunv.com/vancegf/admin/images/screenshot/Overwrite.gif
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:显示"文件替换对话框";
http://www.iyunv.com/vancegf/admin/images/screenshot/Overwrite.gif
  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 + "");
}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.substr(0, 1) == "1") {
folderCount++;
aryItem = aryFiles.split("*");
fileInfo += aryItem;
fileInfo += "\n";
}
}
for (var i = 0; i < count; i++) {
if (aryFiles.substr(0, 1) == "0") {
fileCount++;
aryItem = aryFiles.split("*");
fileInfo += aryItem;
fileInfo += "   ";
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);
}
}



页: [1]
查看完整版本: FTP上传下载控件