转: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. yum源万能

    sed -i ‘s|^#baseurl|baseurl| ; s|^mirrorlist|#mirrorlist|’ /etc/yum.repos.d/*

  2. maven3常用命令、java项目搭建、web项目搭建详细图解

    http://blog.csdn.net/edward0830ly/article/details/8748986 ------------------------------maven3常用命令-- ...

  3. [转载]Spring Web MVC Framework

    Required Configuration You need to map requests that you want the DispatcherServlet to handle, by us ...

  4. package.json 字段全解析 share

    Name 必须字段. 小提示: 不要在name中包含js, node字样: 这个名字最终会是URL的一部分,命令行的参数,目录名,所以不能以点号或下划线开头: 这个名字可能在require()方法中被 ...

  5. Oracle 6 - 锁和闩 - 锁类型

    Oracle锁大类 1.DML锁 (SELECT, INSERT, UPDATE, DELETE, MERGE是对数据库加的锁, 可能是行锁,也可能是表锁) 2.DDL锁 (Create, Alter ...

  6. TDD三个阶段

    TDD的三个阶段 红灯.绿灯.重构 :明确了实施TDD所要遵循的工作流 (需求--->测试-->代码[重构]) 红灯阶段:      为不存在的代码编写测试 绿灯阶段:      仅编写适 ...

  7. 开发版本控制git

    git init 在git命令行中依次输入 touch readme.txt并回车, git add . 点代表所有, git commit -m "init first"并回车, ...

  8. NPOI操作EXCEL----------NPOI基础01

    来源地址:http://www.cnblogs.com/csqb-511612371/p/4878059.html 先来介绍一下NPOI基本的东西: 1.下载地址:http://npoi.codepl ...

  9. 223. Rectangle Area

    题目: Find the total area covered by two rectilinear rectangles in a 2D plane. Each rectangle is defin ...

  10. [leetcode] Path sum路径之和

    要求给定树,与路径和,判断是否存在从跟到叶子之和为给定值的路径.比如下图中,给定路径之和为22,存在路径<5,4,11,2>,因此返回true;否则返回false. 5 / \ 4 8 / ...