转: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. 解决unity3d发布的网页游戏放到服务器上无法使用的问题

    http://www.unity蛮牛.com/blog-2429-1226.html 第一次把unity3d发布的网页游戏放到服务器上(Win2003),发现无法使用.可以尝试以下办法.       ...

  2. android2.3 -添加自定义按键:作唤醒功能 .

    最近需要做个唤醒功能,当按键的时候android系统唤醒并点亮屏,在长按键中,系统不能在进入睡眠. 驱动方面: 1:在平台设备文件中添加 一个按键,定义为唤醒源! \arch\arm\mach-s5p ...

  3. G家二面

    题目都很基本,都属于听说过但是不会做的…都是操作系统,compiler的概念题… 概念题郁闷就郁闷在不会就是不会,就算能扯两句也会被问倒… 算法就一个,pow(x, y),5分钟不到…… 不是听说G家 ...

  4. [Ruby on Rails系列]6、一个简单的暗语生成器与解释器(上)

    [0]Ruby on Rails 系列回顾 [Ruby on Rails系列]1.开发环境准备:Vmware和Linux的安装 [Ruby on Rails系列]2.开发环境准备:Ruby on Ra ...

  5. lintcode: 中序遍历和后序遍历树构造二叉树

    题目 中序遍历和后序遍历树构造二叉树 根据中序遍历和后序遍历树构造二叉树 样例 给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2] 返回如下的树: 2 /  \ 1    3 注意 你可 ...

  6. MySQL错误代码大全【转载】

    B.1. 服务器错误代码和消息 服务器错误信息来自下述源文件: 错误消息信息列在share/errmsg.txt文件中."%d"和"%s"分别代表编号和字符串, ...

  7. amd(超微半导体公司(英语:Advanced Micro Devices, Inc.,缩写:AMD))

    公司名称 AMD(超微半导体公司)   经营范围 CPU.显卡.主板等电脑硬件设备 AMD公司专门为计算机.通信和消费电子行业设计和制造各种创新的微处理器(CPU.GPU.APU.主板芯片组.电视卡芯 ...

  8. import java.util.Scanner;

    一.扫描控制台输入     当通过new Scanner(System.in)创建一个Scanner,控制台会一直等待输入,,,,,,,直到敲回车键结束,把所输入的内容传给Scanner,作为扫描对象 ...

  9. MVC 中与链接相关的辅助方法(Html.ActionLink,Html.RouteLink , Url.Action , Url.Content ,Url.RouteUrl)

    Html.ActionLink 与 Url.Action  1.两者者是根据给定的Controller,Action 生成链接, 但是Html.ActionLink 返回的是MvcHtmlString ...

  10. BeanFactory 和 ApplicationContext

    Spring通过一个配置文件描述Bean及Bean直接的依赖关系,利用Java语言的反射功能实例化Bean并建立Bean之间的依赖关系.Sprig的IoC容器在完成这些底层工作的基础上,还提供了Bea ...