转:http://www.kaifazhe.com/ios_school/380066.html

官方建议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"
4
5 @interface ViewController ()
6 {
7 // AFN的客户端,使用基本地址初始化,同时会实例化一个操作队列,以便于后续的多线程处理
8 AFHTTPClient *_httpClient;
9
10 // 下载操作
11 AFHTTPRequestOperation *_downloadOperation;
12
13 NSOperationQueue *_queue;
14 }
15
//下载进度条显示
16 @property (weak, nonatomic) IBOutlet UIProgressView *progressView;
17
18 @end
19
20 @implementation ViewController
21 /*
22 关于文件下载,在Documents中保存的文件,一定是要应用程序产生的文件或者数据
23 没有明显提示用户下载到本地的文件不能保存在Docuemnts中!
24
25
26 */
27
28 - (void)viewDidLoad
29 {
30 [super viewDidLoad];
31
32 NSURL *url = [NSURL URLWithString:@"http://192.168.3.251/~apple/itcast"];
33 _httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
34
35 _queue = [[NSOperationQueue alloc] init];
36 }

2.利用AFN实现文件下载操作细节                                 

 1 #pragma mark 下载
2 - (IBAction)download
3 {
4 // 1. 建立请求
5 NSURLRequest *request = [_httpClient requestWithMethod:@"GET" path:@"download/Objective-C2.0.zip" parameters:nil];
6
7 // 2. 操作
8 AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
9
10 _downloadOperation = op;
11
12 // 下载
13 // 指定文件保存路径,将文件保存在沙盒中
14 NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
15 NSString *path = [docs[0] stringByAppendingPathComponent:@"download.zip"];
16
17 op.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];
18
19 // 设置下载进程块代码
20 /*
21 bytesRead 当前一次读取的字节数(100k)
22 totalBytesRead 已经下载的字节数(4.9M)
23 totalBytesExpectedToRead 文件总大小(5M)
24 */
25 [op setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
26
27 // 设置进度条的百分比
28 CGFloat precent = (CGFloat)totalBytesRead / totalBytesExpectedToRead;
29 NSLog(@"%f", precent);
30
31 _progressView.progress = precent;
32 }];
33
34 // 设置下载完成操作
35 [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
36
37 // 下载完成之后,解压缩文件
38 /*
39 参数1:要解结压缩的文件名及路径 path - > download.zip
40 参数2:要解压缩到的位置,目录 - > document目录
41 */
42 [SSZipArchive unzipFileAtPath:path toDestination:docs[0]];
43
44 // 解压缩之后,将原始的压缩包删除
45 // NSFileManager专门用于文件管理操作,可以删除,复制,移动文件等操作
46 // 也可以检查文件是否存在
47 [[NSFileManager defaultManager] removeItemAtPath:path error:nil];
48
49 // 下一步可以进行进一步处理,或者发送通知给用户。
50 NSLog(@"下载成功");
51 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
52 NSLog(@"下载失败");
53 }];
54
55 // 启动下载
56 [_httpClient.operationQueue addOperation:op];
57 }

3.关于暂停和继续                                    

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

4.检测网络状态–优化用户体验                              

 1 #pragma mark 检测网路状态
2 /*
3 AFNetworkReachabilityStatusUnknown = -1, 未知
4 AFNetworkReachabilityStatusNotReachable = 0, 未连接
5 AFNetworkReachabilityStatusReachableViaWWAN = 1, 3G
6 AFNetworkReachabilityStatusReachableViaWiFi = 2, 无线连接
7 */
8 - (IBAction)checkNetwork:(id)sender
9 {
10 // 1. AFNetwork 是根据是否能够连接到baseUrl来判断网络连接状态的
11 // 提示:最好使用门户网站来判断网络连接状态。
12 NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
13
14 AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:url];
15 _httpClient = client;
16
17 [_httpClient setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
18
19 // 之所以区分无线和3G主要是为了替用户省钱,省流量
20 // 如果应用程序占流量很大,一定要提示用户,或者提供专门的设置,仅在无线网络时使用!
21 switch (status) {
22 case AFNetworkReachabilityStatusReachableViaWiFi:
23 NSLog(@"无线网络");
24 break;
25 case AFNetworkReachabilityStatusReachableViaWWAN:
26 NSLog(@"3G网络");
27 break;
28 case AFNetworkReachabilityStatusNotReachable:
29 NSLog(@"未连接");
30 break;
31 case AFNetworkReachabilityStatusUnknown:
32 NSLog(@"未知错误");
33 break;
34 }
35 }];
36 }

iOS-利用AFNetworking(AFN 1.x)-实现文件断点下载的更多相关文章

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

    https://www.cnblogs.com/qingche/p/3500746.html 1. 定义一个全局的AFHttpClient:包含有 1> baseURL 2> 请求 3&g ...

  2. iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件断点下载

    官方建议AFN的使用方法   0.导入框架准备工作 •1. 将AFNetworking3.0+框架程序拖拽进项目   •2. 或使用Cocopod 导入AFNetworking3.0+   •3.   ...

  3. ios开发网络学习四:NSURLConnection大文件断点下载

    #import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> ...

  4. 使用NSURLConnection实现大文件断点下载

    使用NSURLConnection实现大文件断点下载 由于是实现大文件的断点下载,不是下载一般图片什么的.在设计这个类的时候本身就不会考虑把下载的文件缓存到内存中,而是直接写到文件系统. 要实现断点下 ...

  5. iOS 大文件断点下载

    iOS 在下载大文件的时候,可能会因为网络或者人为等原因,使得下载中断,那么如何能够进行断点下载呢? // resumeData的文件路径 #define XMGResumeDataFile [[NS ...

  6. iOS-服务器文件断点下载

    文件下载基本步骤:1.获取下载链接,创建响应发送请求.(使用异步请求,避免因文件过大下载时间长而阻塞主线程).2.当接到响应时在下载目录中创建文件.创建文件使用NSFileHandle进行文件内部处理 ...

  7. android网络编程之HttpUrlConnection的讲解--实现文件断点下载

    1.没有实现服务器端,下载地址为网上的一个下载链接. 2.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android. ...

  8. Retrofit 2.0 超能实践(四),完成大文件断点下载

    作者:码小白 文/CSDN 博客 本文出自:http://blog.csdn.net/sk719887916/article/details/51988507 码小白 通过前几篇系统的介绍和综合运用, ...

  9. Android学习笔记_15_网络通信之文件断点下载

    一.断点下载原理: 使用多线程下载文件可以更快完成文件的下载,多线程下载文件之所以快,是因为其抢占的服务器资源多.如:假设服务器同时最多服务100个用户,在服务器中一条线程对应一个用户,100条线程在 ...

随机推荐

  1. 清除目录下的SVN信息

    今天需要迁移一个版本库中的子目录到新的版本库中,以为不需要保留日志信息,所以只需拿最新的代码提交就可以. 对于清除目录下的SVN信息,在网上找一些方法,并实践执行了下: 在linux下 删除这些目录是 ...

  2. What is the Best Programming Language to Learn in 2014?

    It’s been a year since I revealed the best languages to learn in 2013. Once again, I’ve examined the ...

  3. Unity3d修改FBX文件的动画名方法

    问题描述:FBX文件导入Unity3d后的动画名字一般都是 “Take 001”并且无法修改!如何修改它呢? 解决方法:解决方法其实很简单,只要你按照Unity3d的FBX文件命名规则,压根就不会存在 ...

  4. java001-Helloworld

    public class test05 { public static void main(String[] args) { System.out.println("Hello World! ...

  5. Git 使用方法

    Git 常用命令 git init here -- 创建本地仓库(repository),将会在文件夹下创建一个 .git 文件夹,.git 文件夹里存储了所有的版本信息.标记等内容 git remo ...

  6. [转]Openstack neutron 防火墙

    全文阅读传送门:http://www.ustack.com/wp-content/uploads/2013/11/Neutron%E9%98%B2%E7%81%AB%E5%A2%99.pdf 原作者: ...

  7. 李洪强漫谈iOS开发[C语言-038]-if else if语句

    李洪强漫谈iOS开发[C语言-038]-if else if语句

  8. chm文件访问提示:已取消到该网页的导航

    chm文件访问提示:已取消到该网页的导航或不能链接网页 解决方案: 右击chm文件,选择:属性->解除锁定 ,再重新打开文件即可

  9. jQuery编程基础精华01(jQuery简介,顶级对象$,jQuery对象、Dom对象,链式编程,选择器)

    jQuery简介 什么是jQuery? jQuery就是一个JavaScript函数库,没什么特别的.(开源)联想SQLHelper类 jQuery能做什么?jQuery是做什么的? jQuery本身 ...

  10. .md文件 Markdown 语法说明

    Markdown 语法说明 (简体中文版) / (点击查看快速入门) 概述 宗旨 兼容 HTML 特殊字符自动转换 区块元素 段落和换行 标题 区块引用 列表 代码区块 分隔线 区段元素 链接 强调 ...