一、FTP客户端

作者:创世魂

 

● 本模块说明

 

通过使用本模块可以实现FTP相关操作,开发一个FTP管理软件。

注:欲使用本功能必须配置“FTP客户端”模块。

 

● 准备操作

 

需要准备一个FTP服务器。

1、本地搭建可以使用“简单FTP server”等轻量级的FTP服务器软件。

2、网络搭建可以使用“FileZilla Server”“ Serv-U”等软件搭建。

3、也可以使用“PhpStudy”等建站软件搭建FTP。

4、FTP服务器搭建完毕后,建立一个FTP用户,并开启所有控制权限。

注:不同FTP服务器创建用户的方式不同,权限设置可能也不一样,自行百度搜索解决方案。

 

● FTP登陆

 

想要实现FTP登陆需要使用一个类“FTP客户端”和本类中的两个方法“连接”“登陆”

 

“连接”帮助文档:

通过本方法可连接FTP服务器,如果想要登陆FTP必须在连接成功后调用“登陆()”方法。

参数1:填写FTP服务器地址。

参数2:填写FTP端口号,默认为21。

参数3:本参数如果填写“真”则会触发“连接完毕”事件,并且是否连接成功也在该事件下。

如果本参数填写假,则直接返回是否连接成功。

 

“登陆”帮助文档:

顾名思义,调用本方法可登陆FTP服务器。

注意:必须调用“连接()”方法连接成功后才能调用本方法登陆。

参数1:输入FTP账户名称,默认为匿名账户。

参数2:输入FTP账户密码,匿名登陆直接忽略即可。

 

代码编写如下图:

1、准备三个编辑框和一个按钮,编辑框用来填写FTP服务器相关信息,按钮用来点击登陆。

2、定义类型为“FTP客户端”的成员变量。

3、“按钮1”被点击后,执行“连接()”方法填写对应参数并判断是否连接成功。

4、如果连接成功则执行“登陆()”方法登陆FTP服务器。

 

运行结果如下图:

左图:“按钮1”被点击后提示登陆成功。

右图:FTP服务器软件也显示有用户登陆。

 

● 获取目录和文件

 

想要获取FTP中的目录和文件,需要使用“FTP客户端”类的以下方法配合。

 

“被动模式()”帮助文档:

在FTP连接中分为“主动模式”“被动模式”

此方法的作用就是将当前FTP设置为被动模式。

在被动模式的FTP中,命令连接和数据连接都由客户端完成。

只有在此模式下,才能进行对FTP文件目录的获取。

 

“取文件列表()”帮助文档:

顾名思义,通过本方法课获取FTP指定目录中的文件列表,返回值为“FTP文件类[]”数组。

失败将返回空对象。

 

“FTP文件类”帮助文档:

本类中存储了FTP所有的文件信息。

例如:通过“FTP文件类.为文件”读属性可判断是否为文件。

注意:本类不能直接创建,必须通过“取文件列表()”方法获取。

 

“编码(写)”帮助文档:

如果在获取FTP文件遇到中文乱码时,可通过本属性修改编码。

属性值书写方式:“文本编码.XXX”,或者直接填写“GBK”“UTF-8”等编码名称。

 

界面准备:

准备一个“按钮”和一个“简单列表框”

然后将“简单列表框”组件设置“高/宽度”分别为“匹配父组件”尺寸。

 

代码编写如下图:

1、在进行获取目录之前必须要进行“登陆”操作(后续将不再赘述)。

2、登陆成功后立刻设置“被动模式()”“编码”,因电脑是GBK编码,所以此处要填写“文本编码.GBK”.

3、调用“取文件列表()”,赋值给定义的“FTP文件类[]”变量。

4、利用“循环()”取出所有成员,并从FTP文件类中取出想要的数据插入到列表框中。

 

运行结果如下图(GIF):

左图:FTP客户端获取目录效果。

右图:FTP服务器根目录文件展示。

当按钮被点击后,FTP根目录的所有文件都会出现在列表框中。

注意:目录中“.”“..”并非连接所有FTP服务器都会出现。

这两个目录通常用作识别想要的操作。

例如:点击“..”返回上一级,点击“.”返回根目录。

  

 

● 进入目录
● 返回上级目录

 

想要实现以上两个操作,需要使用以下方法实现。

 

“取工作目录”帮助文档:

顾名思义,可以取出当前工作目录。

使用本方法时,需要注意路径符号的问题(红框内)。

注意:如果FTP掉线等情况,本方法将会返回空对象。

 

“置工作目录”帮助文档:

设置后当前FTP的工作目录就会被设置成指定目录。

设置成功后,如果要下载工作目录内的文件,直接填写文件名就可以下载。

注意:成功返回真,失败返回假。

失败原因:通常为没有在“登陆FTP”前调用“被动模式()”方法。

 

“切换到父目录()”帮助文档:

顾名思义,切换工作目录到上级目录。

成功返回真,失败返回假。

 

界面设计:

在原界面的基础上增加一个按钮,用于返回上一级。

 

代码编写(1):

将前面学到的“获取目录和文件”的办法,进行一下封装操作,方便多次调用。

可利用“Ctrl+M”新建方法。

 

代码编写(2):

“按钮1”被点击:登陆之后调用“获取目录()”方法。

注意:必须在登陆之前调用“被动模式()”方法,否则无法正常执行“置工作目录()”方法。

“按钮2”被点击:调用“切换到父目录()”方法 后执行“获取目录()”方法。

 

代码编写(3):

1、添加“简单列表框_项目被单击”事件。

2、通过列表框适配器的“取项目()”方法取出列表标题,即FTP目录名称。

3、利用“取工作目录()”方法判断是否需要路径符号。

4、调用“置工作目录()”方法,设置新路径后调用“获取目录()”

 

运行结果如下图(GIF):

最终成功进入新目录,也可以返回上一级目录。

 

● 创建目录

 

帮助文档如下图:

顾名思义,调用本方法可以在FTP服务器中创建一个新的目录。

成功返回真,失败返回假。

 

代码编写如下图:

在前面的例程基础上简单修改即可。

“按钮2”被点击后,调用当前方法创建一个新的目录,创建后刷新FTP目录。

关于“获取目录()”方法点击跳转,后续将不再赘述。

 

运行结果如下图(GIF):

可以看到当“创建目录”按钮被点击后,FTP文件列表中增加了一个新的目录。

 

● 重命名
● 移动

 

帮助文档如下图:

在FTP服务器有权限的情况下,本方法共有四个作用。

1、重命名文件。

2、重命名目录。

3、移动文件。

4、移动目录。

进行移动操作时,“参数2”直接填写新目录+新文件路径即可。

注意:填写路径的时候应当注意工作目录的问题。

例如:FTP完整路径为“/A/B/C”,当前工作目录为“B”,如果要操作“C”目录,参数1直接填写“C”即可,无需输入完整路径。

 

代码编写如下图:

“按钮2”被点击后,调用“重命名文件()”方法,将“新的目录1”进行重命名操作。

随后调用“获取目录()”刷新。

 

运行结果如下图(GIF):

最终结果,可以看到“新的目录1”被更名为“重命名后的名字”

 

● 删除文件
● 删除目录

 

以上两个方法都是用于删除操作,此处讲解“删除目录()”方法。

 

帮助文档如下图:

顾名思义,本方法的作用就是用来删除目录。

注意:只能删除没有任何内容的空目录。

删除成功返回真,失败返回假。

 

代码编写如下图:

“按钮2”被点击后,调用“删除目录()”方法删除“测试文件夹1”

删除后刷新目录。

 

运行结果如下图(GIF):

最终可以看到“测试文件夹1”被删除。

 

● 上传文件

 

想要实现文件上传,需要使用以下方法事件。

 

“数据接收缓冲区尺寸(写)”帮助文档:

想要实现文件上传务必设置此属性,建议设置:20480字节。

本属性的作用就是设置一个临时的数据缓冲区,上传或者下载文件的时候临时存放一些数据。

注意:本属性“下载文件()”方法同样也需要设置。

 

“上传文件()”帮助文档:

顾名思义,调用本方法就可以实现上传本地文件到FTP服务器中。

参数1:填写要上传的本地文件路径。

参数2:填写要FTP保存路径。

本方法调用后会触发“传输进度被改变”事件,上传结束后会触发“传输完毕”事件。

注意:本方法不能和“下载文件()”方法同时使用。

 

“传输进度被改变(事件)”帮助文档:

调用“上传文件()”“下载文件()”都会触发本事件。

参数1:如果为上传模式则返回本地文件名,下载模式则为远程文件名。

参数2:返回当前已经上传/下载的尺寸,单位字节,通过此参数可确定上传/下载进度。

参数3:如果为上传模式则返回远程文件名,否则返回本地文件名。

 

“传输完毕(事件)”帮助文档:

上传或下载完毕都会触发本事件。

参数1、2:这两个参数和“传输进度被改变”事件的作用一致。

参数3:用于判断是否传输成功。

参数4:返回0表示当前为上传模式,返回1表示下载模式。

 

代码编写如下图:

1、“按钮2”被点击,设置缓冲区后调用“上传文件()”方法上传存储卡中的一个文件到ftp服务器中。

2、添加“传输进度被改变”事件,利用“取文件尺寸()”方法取出要上传的文件尺寸。

3、将“已传输尺寸”参数和“文件尺寸”显示在窗口标题上。

4、添加“传输完毕”事件,判断上传成功后调用“获取目录()”刷新目录。

 

运行结果如下图(GIF):

最终点击“上传”按钮后,文件成功出现在FTP服务器中。

 

● 下载文件

 

帮助文档如下图:

顾名思义,本方法可以将ftp服务器上的文件下载到手机存储卡上。

参数1:填写要下载的ftp服务器文件名称。

参数2:填写本地保存文件路径。

注意:下载文件不支持暂停和断点续传,如果中断需要从头开始下载。

 

代码编写(1):

封装一个“获取指定FTP文件大小”方法备用。

1、在新建的方法中填写一个参数,用作判断要取哪个文件的大小。

2、调用“取文件列表()”方法取出ftp服务器中所有文件数据。

3、循环取出的文件数据,并判断是否有参数中的文件名,如果有则返回此文件的尺寸。

4、最后在循环的末尾返回-1,表示没找到。

 

代码编写(2):

1、“按钮2”被点击,设置缓冲区并取出要下载的文件大小,赋值给定义好的成员变量。

2、调用“下载文件()”下载指定文件。

3、在“传输进度被改变”事件下,将“ftp文件大小”“已传输尺寸”显示在窗口标题上。

4、“传输完毕”事件下,判断下载的文件是否存在,用于验证是否下载成功。

 

运行结果如下图(GIF):

最终点击“下载文件”按钮后提示“下载完毕”,并且下载进度也正常显示。