官方建议AFN的使用方法
 

0.导入框架准备工作  

•1. 将AFNetworking3.0+框架程序拖拽进项目
 
•2. 或使用Cocopod 导入AFNetworking3.0+
 
•3.  引入
#import "AFNetworking.h"

---->

1.UI准备工作  

A. 定义一个全局的 NSURLSessionDownloadTask:下载管理句柄
   由其负责所有的网络操作请求
@interface ViewController ()
{
// 下载句柄
NSURLSessionDownloadTask *_downloadTask;
}
.h文件
#import <UIKit/UIKit.h> @interface ViewController : UIViewController
// 下载文件显示 @property (weak, nonatomic) IBOutlet UIImageView *imageView;
// 下载进度条显示 @property (weak, nonatomic) IBOutlet UIProgressView *progressView;
@end .m文件
@interface ViewController ()
{
// 下载句柄
NSURLSessionDownloadTask *_downloadTask;
}

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

- (void)downFileFromServer{

    //远程地址
NSURL *URL = [NSURL URLWithString:@"http://www.baidu.com/img/bdlogo.png"];
//默认配置
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; //AFN3.0+基于封住URLSession的句柄
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; //请求
NSURLRequest *request = [NSURLRequest requestWithURL:URL]; //下载Task操作
_downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) { // @property int64_t totalUnitCount; 需要下载文件的总大小
// @property int64_t completedUnitCount; 当前已经下载的大小 // 给Progress添加监听 KVO
NSLog(@"%f",1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);
// 回到主队列刷新UI
dispatch_async(dispatch_get_main_queue(), ^{
// 设置进度条的百分比 self.progressView.progress = 1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount;
}); } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { //- block的返回值, 要求返回一个URL, 返回的这个URL就是文件的位置的路径 NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *path = [cachesPath stringByAppendingPathComponent:response.suggestedFilename];
return [NSURL fileURLWithPath:path]; } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
//设置下载完成操作
// filePath就是你下载文件的位置,你可以解压,也可以直接拿来使用 NSString *imgFilePath = [filePath path];// 将NSURL转成NSString
UIImage *img = [UIImage imageWithContentsOfFile:imgFilePath];
self.imageView.image = img; }];
}

3.关于暂停和继续  

- (IBAction)stopDownloadBtnClick:(id)sender {
//暂停下载
[_downloadTask suspend];
}
- (IBAction)startDownloadBtnClick:(id)sender {
//开始下载
[_downloadTask resume];
}

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

- (void)viewDidLoad {
[super viewDidLoad]; //网络监控句柄
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager]; //要监控网络连接状态,必须要先调用单例的startMonitoring方法
[manager startMonitoring]; [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
//status:
//AFNetworkReachabilityStatusUnknown = -1, 未知
//AFNetworkReachabilityStatusNotReachable = 0, 未连接
//AFNetworkReachabilityStatusReachableViaWWAN = 1, 3G
//AFNetworkReachabilityStatusReachableViaWiFi = 2, 无线连接
NSLog(@"%d", status);
}]; //准备从远程下载文件. -> 请点击下面开始按钮启动下载任务
[self downFileFromServer]; }

>> My GitHub:源码 https://github.com/SaupClear/AFNetworking3.0-

· AFNetworking3.0以下的版本使用方法可以看我老版本的日志:

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

作者: 清澈Saup

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

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

iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件断点下载的更多相关文章

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

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

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

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

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

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

  4. iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件上传

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

  5. iOS 大文件断点下载

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

  6. AFN多文件进度下载

    AFN参考资料 http://www.jianshu.com/p/c36159094e24 http://blog.cnbang.net/tech/2320/http://blog.cnbang.ne ...

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

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

  8. Android网络编程之——文件断点下载

    一:关于断点下载所涉及到的知识点 1.对SQLite的增删改查(主要用来保存当前任务的一些信息) 2.HttpURLConnection的请求配置 HttpURLConnection connecti ...

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

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

随机推荐

  1. ES6 Promise 接口

    构造函数 new Promise(function(resolve, reject){}); 构造函数接受一个函数(executor)作为参数,该函数在返回 Promise 实例之前被调用.函数的两个 ...

  2. AssetBundle系列——打包前进行平台检测

    在生成AssetBundle的时候,如果目标平台和当前平台不一致,Unity3D会自动将当前平台转换为目标平台. 如果项目中资源量比较大,这个转换过程是相当漫长的,并且不能够强行中止. 所以最好在Bu ...

  3. cocos2d-x中使用可加密Sqlite存储玩家数据

    手机游戏当中的数据存储是一个重要的课题.cocos2d-x发展到现在的版本2.1.4,已经直接实现了对sqlite的支持(extensions/LocalStorage),这对我们一般的数据存储已经够 ...

  4. 菜鸟学Windows Phone 8开发(3)——布局和事件基础

    本系列文章来源MSDN的 面向完全新手的 Windows Phone 8 开发  本文地址:http://channel9.msdn.com/Series/Windows-Phone-8-Develo ...

  5. 【JVM学习笔记一】JVM内存分布

    Overview 学习JVM首先需要了解一下JVM管理的内存是如何分布的,在看了<深入理解Java虚拟机>和一些博文之后,我准备自己记录一下学习的过程. 下图是JVM中运行时数据区的大致示 ...

  6. iOS-UITextField-通知

    二.处理文本框与键盘之间的关系(当键盘弹出遮挡到文本框的时候进行调整) 原理: 首先要明白: 1,键盘隐藏的时候,键盘上边界紧贴屏幕最低端,键盘在屏幕正下方. 2:键盘弹起的时候,键盘下边界跟屏幕下边 ...

  7. intellij 调试方法

    intellij 调试方法 转自 http://www.th7.cn/Program/net/201410/296492.shtml

  8. IOS高级编程之一:多点触摸与手势验证

    前段时间学习了IOS基础的一些控件的使用作为基础,现在开始学习一些高级编程的东西,手势处理器.文件I/O.定位.网络通信.多线程这些,分享一些学习的重点,还是很实用的. 今天就先介绍个简单点得,手势处 ...

  9. android:inputType参数类型说明

    android:inputType参数类型说明 android:inputType="none"--输入普通字符 android:inputType="text" ...

  10. 基于KV Data Model实现Table Data Model

    HBase对外暴露出来的是一个表格数据模型,如下图所示 rowkey应用程序可以自己设计.每一个Cell可以保存多个版本的数据,由timestamp标示版本.应用程序可以自己指定timestamp,如 ...