iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件断点下载

0.导入框架准备工作  

•1. 将AFNetworking3.0+框架程序拖拽进项目

•2. 或使用Cocopod 导入AFNetworking3.0+

•3.  引入

#import "AFNetworking.h"

---->

1.UI准备工作  

A. 定义一个全局的 NSURLSessionDownloadTask:下载管理句柄

   由其负责所有的网络操作请求


1

2

3

4

5

@interface ViewController ()

{

    // 下载句柄

    NSURLSessionDownloadTask *_downloadTask;

}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

.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实现文件下载操作细节  


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

- (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.关于暂停和继续  


1

2

3

4

5

6

7

8

- (IBAction)stopDownloadBtnClick:(id)sender {

    //暂停下载

    [_downloadTask suspend];

}

- (IBAction)startDownloadBtnClick:(id)sender {

    //开始下载

    [_downloadTask resume];

}

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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

- (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/

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

时间: 2024-12-25 23:34:47

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

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

iOS- 利用AFNetworking(AFN) - 实现文件断点下载 官方建议AFN的使用方法 1. 定义一个全局的AFHttpClient:包含有 1> baseURL 2> 请求 3> 操作队列 NSOperationQueue 2. 由AFHTTPRequestOperation负责所有的网络操作请求 0.导入框架准备工作 •1. 将框架程序拖拽进项目 •2.  添加iOS框架引用 –SystemConfiguration.framework –MobileCoreService

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

#import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> @property (weak, nonatomic) IBOutlet UIProgressView *progressView; @property (nonatomic, assign) NSInteger totalSize; @property (nonatomic, assign) NSInte

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

使用NSURLConnection实现大文件断点下载 由于是实现大文件的断点下载,不是下载一般图片什么的.在设计这个类的时候本身就不会考虑把下载的文件缓存到内存中,而是直接写到文件系统. 要实现断点下载,需要满足1个条件,那就是,必须要服务器支持断点下载. 实现的思路是这样子的: 1.  第一次会获取到被下载文件的总大小(服务器提供这个值) 下载文件总大小 = 期望从服务器获取文件的大小 + 本地已经下载的文件的大小 2.  设置请求的缓存策略为不会读取本地中已经缓存的数据(NSURLReque

iOS中利用NSURLSession进行文件断点下载

第一部分 知识储备 1.对NSURLSesiion的认识 NSURLSesiion是苹果在iOS7推出的一个类,它具备了NSURLConnection所具备的方法,同时也比它更强大.苹果推出它的目的大有取代NSURLConnection的趋势或者目的. 2.  NSURLSesiion的作用 实现对文件的下载与上传.在NSURLSesiion中,任何请求都可以被看做是一个任务.而NSURLSesiionData 有两个子类:NSURLSessionDownlaodTask实现文件下载和NSURL

iOS 大文件断点下载

iOS 在下载大文件的时候,可能会因为网络或者人为等原因,使得下载中断,那么如何能够进行断点下载呢? // resumeData的文件路径 #define XMGResumeDataFile [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"resumeData.tmp"] #import

ios:NSURLSessionDataTask做文件断点下载

之前用afn2.x的AFHttpOperation结合sqlite数据库管理做了文件的断点下载功能,之后苹果宣布要开始限制ipv4,不过AFN的东西时给予high-level的APIs的,因此不需要修改,但是国外的开发者建议使用AFN3.0版本. 闲来无事就想重新集成一下,迁移AFN3.0的时候因为没有了HTTPOperation,所以在修改代码的时候全部用NSURLSessionDowonloadTask代替,不过由于之前的数据库逻辑已经定型,且多处使用,修改起来比较复杂,DownloadTa

Android网络编程之——文件断点下载(暂停/继续/重新下载)

开头还是不说废话了直接进入主题吧! 一:关于断点下载所涉及到的知识点 1.对SQLite的增删改查(主要用来保存当前任务的一些信息) 2.HttpURLConnection的请求配置 HttpURLConnection connection = null; //设置下载请求属性 connection.setRequestProperty(); 3.RandomAccessFile 对文件进行写入 RandomAccessFile rwd = null; //从文件的某一位置写入 rwd.seek

大文件断点下载

(1)实现思路 在下载文件的时候不再是整块的从头开始下载,而是看当前文件已经下载到哪个地方,然后从该地方接着往后面下载.可以通过在请求对象中设置请求头实现. (2)解决方案(设置请求头) //2.创建请求对象 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; //2.1 设置下载文件的某一部分 // 只要设置HTTP请求头的Range属性, 就可以实现从指定位置开始下载 /* 表示头500个字节:Ra

android网络编程之HttpUrlConnection的讲解--实现文件断点下载

1.没有实现服务器端,下载地址为网上的一个下载链接. 2.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android.permission.INTERNET"/> 3.网络请求.处理不能在主线程中进行,一定要在子线程中进行.因为网络请求一般有1~3秒左右的延时,在主线程中进行造成主线程的停顿,对用户体验来说是致命的.(主线程应该只进行UI绘制,像网络请求.资源下载.各种耗时操作都应该放到子线程中). 4.断点