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 &#39;ejs&#39;的解决办法  深圳网站制作培训,深圳哪些招聘网站比较好?  ,南京靠谱的征婚网站?  iOS正则表达式验证手机号、邮箱、身份证号等  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  中山网站制作网页,中山新生登记系统登记流程?  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  如何在景安云服务器上绑定域名并配置虚拟主机?  如何在阿里云服务器自主搭建网站?