iOS利用AFNetworking3.0——实现文件断点下载
发布时间 - 2026-01-10 22:48:31 点击率:次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];
}
源码:http://xiazai./201701/yuanma/AFNetworking3.0_jb51.rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# afnetworking断点下载
# afnetworking
# 3.0下载
# ios
# afnetworking下载
# iOS开发中文件的上传和下载功能的基本实现
# iOS NSURLSessionDownloadTask实现文件断点下载的方法
# iOS工程中怎么判断下载的流是PDF文件
# iOS开发-实现大文件下载与断点下载思路
# iOS开发网络篇—实现大文件的多线程断点下载
# iOS NSURLSessionDownloadTask设置代理文件下载的示例
# iOS实现文件下载功能
# 句柄
# 准备工作
# 进度条
# 你可以
# 请点击
# 可以直接
# 要先
# 远程下载
# 转成
# 由其
# 大家多多
# 返回值
# 拖拽
# 网络监控
# 下载完成
# http
# www
# bdlogo
# img
# baidu
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
网站制作壁纸教程视频,电脑壁纸网站?
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
🚀拖拽式CMS建站能否实现高效与个性化并存?
如何在腾讯云服务器上快速搭建个人网站?
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
Mybatis 中的insertOrUpdate操作
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
如何在不使用负向后查找的情况下匹配特定条件前的换行符
Thinkphp 中 distinct 的用法解析
,怎么在广州志愿者网站注册?
详解Android——蓝牙技术 带你实现终端间数据传输
,在苏州找工作,上哪个网站比较好?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
Android Socket接口实现即时通讯实例代码
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
如何在橙子建站上传落地页?操作指南详解
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
北京专业网站制作设计师招聘,北京白云观官方网站?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
Bootstrap CSS布局之列表
网站建设整体流程解析,建站其实很容易!
高防服务器租用如何选择配置与防御等级?
jQuery中的100个技巧汇总
Linux系统运维自动化项目教程_Ansible批量管理实战
如何快速搭建高效WAP手机网站吸引移动用户?
如何在IIS中新建站点并配置端口与IP地址?
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Laravel如何自定义错误页面(404, 500)?(代码示例)
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
node.js报错:Cannot find module 'ejs'的解决办法
深圳网站制作培训,深圳哪些招聘网站比较好?
,南京靠谱的征婚网站?
iOS正则表达式验证手机号、邮箱、身份证号等
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
中山网站制作网页,中山新生登记系统登记流程?
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
如何在景安云服务器上绑定域名并配置虚拟主机?
如何在阿里云服务器自主搭建网站?

