最近的项目需要FTP下载配置文件,之前都是用https网络请求,对FTP不是很了解,上网看了很多资料,最终实现了FTP文件下载的功能。
使用的是 GoldRaccoon 第三方库,参照iOS ftp下载远程文件夹内容 这篇文章实现了文件下载。关于FTP服务器的搭建,WIN7环境下通过ISS7快速搭建简易FTP服务器 这篇文章讲的很详细。
代码如下:
#import "ViewController.h"
#import "GRRequestsManager.h"
#import "GRListingRequest.h"
@interface ViewController ()<GRRequestsManagerDelegate>
@property (nonatomic, strong) GRRequestsManager *requestsManager;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (IBAction)click:(id)sender {
[self.requestsManager addRequestForListDirectoryAtPath:@""];
[self.requestsManager startProcessingRequests];
}
#pragma mark *** GRRequestsManagerDelegate ***
//代理方法,每次执行列表方法都会走这个方法
- (void)requestsManager:(id<GRRequestsManagerProtocol>)requestsManager didCompleteListingRequest:(id<GRRequestProtocol>)request listing:(NSArray *)listing{
//沙盒目录
NSString *documentsDirectoryPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingString:@"/outxml"];
GRListingRequest *req = (GRListingRequest *)request;
//远程文件夹列表
NSLog(@"%@",listing);
//打印创建的目录
NSLog(@"%@",documentsDirectoryPath);
NSFileManager *fileManager = [NSFileManager defaultManager];
//文件夹列表枚举
[listing enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([[obj pathExtension] isEqualToString:@""]) {
}else{
//如果目录下的不是文件夹,则下载这个文件到沙盒的指定目录下
[self.requestsManager addRequestForDownloadFileAtRemotePath:[NSString stringWithFormat:@"%@/%@",req.path,obj] toLocalPath:[documentsDirectoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@%@",req.path,obj]]];
[self.requestsManager startProcessingRequests];
}
}];
}
#pragma mark *** Lazy loading ***
- (GRRequestsManager *)requestsManager{
if (!_requestsManager) {
//初始化请求类,需要ftp的地址,用户名密码
//这里是我自己在服务器上搭建了一个ftp服务器,并建立站点
_requestsManager = [[GRRequestsManager alloc]initWithHostname:@"ftp://192.168.137.1" user:@"tradenow" password:@"Asfit_123"];
// 设置代理
_requestsManager.delegate = self;
}
return _requestsManager;
}
@end
显示结果:
2018-08-20 16:54:44.521100+0800 0820[6511:259748] (
20180504,
"ReqQryTransferSerial.xml"
)
2018-08-20 16:54:44.521260+0800 0820[6511:259748] /Users/user/Library/Developer/CoreSimulator/Devices/4E2102E8-6C99-4393-9AF9-0FC40FD61D6F/data/Containers/Data/Application/7DC1E9E0-0224-492C-80BF-663970EA28BC/Documents/outxml