iOS-利用AFNetworking(AFN)-实现文件断点下载

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

官方建议AFN的使用方法

1. 定义一个全局的AFHttpClient:包含有

1> baseURL

2> 请求

3> 操作队列 NSOperationQueue

2. 由AFHTTPRequestOperation负责所有的网络操作请求

0.导入框架准备工作•1. 将框架程序拖拽进项目

•2. 添加iOS框架引用

–SystemConfiguration.framework

–MobileCoreServices.framework

•3. 引入

#import "AFNetworking.h"

//下面用于下载完后解压

#import "SSZipArchive.h"

4. 修改xxx-Prefix.pch文件

#import <MobileCoreServices/MobileCoreServices.h>

#import <SystemConfiguration/SystemConfiguration.h>

1.AFN的客户端,使用基本地址初始化,同时会实例化一个操作队列,以便于后续的多线程处理1#import"ViewController.h"2#import"AFNetworking.h"3#import"SSZipArchive.h"45@interfaceViewController ()6{7//AFN的客户端,使用基本地址初始化,同时会实例化一个操作队列,以便于后续的多线程处理8AFHTTPClient *_httpClient;910//下载操作11AFHTTPRequestOperation *_downloadOperation;1213NSOperationQueue *_queue;14}15

//下载进度条显示16@property (weak, nonatomic) IBOutlet UIProgressView *progressView;1718@end1920@implementationViewController21/*22关于文件下载,在Documents中保存的文件,一定是要应用程序产生的文件或者数据23没有明显提示用户下载到本地的文件不能保存在Docuemnts中!242526*/2728- (void)viewDidLoad29{30[super viewDidLoad];3132NSURL *url = [NSURL URLWithString:@"http://192.168.3.251/~apple/itcast"];33_httpClient =[[AFHTTPClient alloc] initWithBaseURL:url];3435_queue =[[NSOperationQueue alloc] init];36}

2.利用AFN实现文件下载操作细节1#pragmamark 下载2-(IBAction)download3{4//1. 建立请求5NSURLRequest *request = [_httpClient requestWithMethod:@"GET"path:@"download/Objective-C2.0.zip"parameters:nil];67//2. 操作8AFHTTPRequestOperation *op =[[AFHTTPRequestOperation alloc] initWithRequest:request];910_downloadOperation =op;1112//下载13//指定文件保存路径,将文件保存在沙盒中14NSArray *docs =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);15NSString *path = [docs[0] stringByAppendingPathComponent:@"download.zip"];1617op.outputStream =[NSOutputStream outputStreamToFileAtPath:path append:NO];1819//设置下载进程块代码20/*21bytesRead 当前一次读取的字节数(100k)22totalBytesRead 已经下载的字节数(4.9M)23totalBytesExpectedToRead 文件总大小(5M)24*/25[op setDownloadProgressBlock:^(NSUInteger bytesRead,longlongtotalBytesRead,longlongtotalBytesExpectedToRead) {2627//设置进度条的百分比28CGFloat precent = (CGFloat)totalBytesRead /totalBytesExpectedToRead;29NSLog(@"%f", precent);3031_progressView.progress =precent;32}];3334//设置下载完成操作35[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation,idresponSEObject) {3637//下载完成之后,解压缩文件38/*39参数1:要解结压缩的文件名及路径 path - > download.zip40参数2:要解压缩到的位置,目录 - > document目录41*/42[SSZipArchive unzipFileAtPath:path toDestination:docs[0]];4344//解压缩之后,将原始的压缩包删除45//NSFileManager专门用于文件管理操作,可以删除,复制,移动文件等操作46//也可以检查文件是否存在47[[NSFileManager defaultManager] removeItemAtPath:path error:nil];4849//下一步可以进行进一步处理,或者发送通知给用户。50NSLog(@"下载成功");51} failure:^(AFHTTPRequestOperation *operation, NSError *error) {52NSLog(@"下载失败");53}];5455//启动下载56[_httpClient.operationQueue addOperation:op];57}

3.关于暂停和继续

1- (IBAction)pauseResume:(id)sender2{3//关于暂停和继续,AFN中的数据不是线程安全的4//如果使用操作的暂停和继续,会使得数据发生混乱5//不建议使用此功能。6//有关暂停和后台下载的功能,NSURLsession中会介绍。7if(_downloadOperation.isPaused) {8[_downloadOperation resume];9}else{10[_downloadOperation pause];11}12}

4.检测网络状态--优化用户体验1#pragmamark 检测网路状态2/*3AFNetworkReachabilityStatusUnknown = -1, 未知4AFNetworkReachabilityStatusNotReachable = 0, 未连接5AFNetworkReachabilityStatusReachableViaWWAN = 1, 3G6AFNetworkReachabilityStatusReachableViaWiFi = 2, 无线连接7*/8- (IBAction)checkNetwork:(id)sender9{10//1. AFNetwork 是根据是否能够连接到baseUrl来判断网络连接状态的11//提示:最好使用门户网站来判断网络连接状态。12NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];1314AFHTTPClient *client =[[AFHTTPClient alloc] initWithBaseURL:url];15_httpClient =client;1617[_httpClient setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {1819//之所以区分无线和3G主要是为了替用户省钱,省流量20//如果应用程序占流量很大,一定要提示用户,或者提供专门的设置,仅在无线网络时使用!21switch(status) {22caseAFNetworkReachabilityStatusReachableViaWiFi:23NSLog(@"无线网络");24

break;25caseAFNetworkReachabilityStatusReachableViaWWAN:26NSLog(@"3G网络");27

break;28caseAFNetworkReachabilityStatusNotReachable:29NSLog(@"未连接");30

break;31caseAFNetworkReachabilityStatusUnknown:32NSLog(@"未知错误");33

break;34}35}];36}

作者: 清澈Saup

出处: http://www.cnblogs.com/qingche/

本文版权归作者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航