作者:创世魂
● 本模块说明
通过使用本模块可以实现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):
最终点击“下载文件”按钮后提示“下载完毕”,并且下载进度也正常显示。