iOS-利用AFNetworking(AFN 1.x)-实现文件断点下载
转:http://www.kaifazhe.com/ios_school/380066.html
官方建议AFN的使用方法
1. 定义一个全局的AFHttpClient:包含有
1> baseURL
2> 请求
3> 操作队列 NSOperationQueue
2. 由AFHTTPRequestOperation负责所有的网络操作请求
0.导入框架准备工作
#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)-实现文件断点下载的更多相关文章
- iOS- 利用AFNetworking(AFN) - 实现文件断点下载
https://www.cnblogs.com/qingche/p/3500746.html 1. 定义一个全局的AFHttpClient:包含有 1> baseURL 2> 请求 3&g ...
- iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件断点下载
官方建议AFN的使用方法 0.导入框架准备工作 •1. 将AFNetworking3.0+框架程序拖拽进项目 •2. 或使用Cocopod 导入AFNetworking3.0+ •3. ...
- ios开发网络学习四:NSURLConnection大文件断点下载
#import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> ...
- 使用NSURLConnection实现大文件断点下载
使用NSURLConnection实现大文件断点下载 由于是实现大文件的断点下载,不是下载一般图片什么的.在设计这个类的时候本身就不会考虑把下载的文件缓存到内存中,而是直接写到文件系统. 要实现断点下 ...
- iOS 大文件断点下载
iOS 在下载大文件的时候,可能会因为网络或者人为等原因,使得下载中断,那么如何能够进行断点下载呢? // resumeData的文件路径 #define XMGResumeDataFile [[NS ...
- iOS-服务器文件断点下载
文件下载基本步骤:1.获取下载链接,创建响应发送请求.(使用异步请求,避免因文件过大下载时间长而阻塞主线程).2.当接到响应时在下载目录中创建文件.创建文件使用NSFileHandle进行文件内部处理 ...
- android网络编程之HttpUrlConnection的讲解--实现文件断点下载
1.没有实现服务器端,下载地址为网上的一个下载链接. 2.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android. ...
- Retrofit 2.0 超能实践(四),完成大文件断点下载
作者:码小白 文/CSDN 博客 本文出自:http://blog.csdn.net/sk719887916/article/details/51988507 码小白 通过前几篇系统的介绍和综合运用, ...
- Android学习笔记_15_网络通信之文件断点下载
一.断点下载原理: 使用多线程下载文件可以更快完成文件的下载,多线程下载文件之所以快,是因为其抢占的服务器资源多.如:假设服务器同时最多服务100个用户,在服务器中一条线程对应一个用户,100条线程在 ...
随机推荐
- 解决unity3d发布的网页游戏放到服务器上无法使用的问题
http://www.unity蛮牛.com/blog-2429-1226.html 第一次把unity3d发布的网页游戏放到服务器上(Win2003),发现无法使用.可以尝试以下办法. ...
- android2.3 -添加自定义按键:作唤醒功能 .
最近需要做个唤醒功能,当按键的时候android系统唤醒并点亮屏,在长按键中,系统不能在进入睡眠. 驱动方面: 1:在平台设备文件中添加 一个按键,定义为唤醒源! \arch\arm\mach-s5p ...
- G家二面
题目都很基本,都属于听说过但是不会做的…都是操作系统,compiler的概念题… 概念题郁闷就郁闷在不会就是不会,就算能扯两句也会被问倒… 算法就一个,pow(x, y),5分钟不到…… 不是听说G家 ...
- [Ruby on Rails系列]6、一个简单的暗语生成器与解释器(上)
[0]Ruby on Rails 系列回顾 [Ruby on Rails系列]1.开发环境准备:Vmware和Linux的安装 [Ruby on Rails系列]2.开发环境准备:Ruby on Ra ...
- lintcode: 中序遍历和后序遍历树构造二叉树
题目 中序遍历和后序遍历树构造二叉树 根据中序遍历和后序遍历树构造二叉树 样例 给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2] 返回如下的树: 2 / \ 1 3 注意 你可 ...
- MySQL错误代码大全【转载】
B.1. 服务器错误代码和消息 服务器错误信息来自下述源文件: 错误消息信息列在share/errmsg.txt文件中."%d"和"%s"分别代表编号和字符串, ...
- amd(超微半导体公司(英语:Advanced Micro Devices, Inc.,缩写:AMD))
公司名称 AMD(超微半导体公司) 经营范围 CPU.显卡.主板等电脑硬件设备 AMD公司专门为计算机.通信和消费电子行业设计和制造各种创新的微处理器(CPU.GPU.APU.主板芯片组.电视卡芯 ...
- import java.util.Scanner;
一.扫描控制台输入 当通过new Scanner(System.in)创建一个Scanner,控制台会一直等待输入,,,,,,,直到敲回车键结束,把所输入的内容传给Scanner,作为扫描对象 ...
- MVC 中与链接相关的辅助方法(Html.ActionLink,Html.RouteLink , Url.Action , Url.Content ,Url.RouteUrl)
Html.ActionLink 与 Url.Action 1.两者者是根据给定的Controller,Action 生成链接, 但是Html.ActionLink 返回的是MvcHtmlString ...
- BeanFactory 和 ApplicationContext
Spring通过一个配置文件描述Bean及Bean直接的依赖关系,利用Java语言的反射功能实例化Bean并建立Bean之间的依赖关系.Sprig的IoC容器在完成这些底层工作的基础上,还提供了Bea ...