iOS- 利用AFNetworking3.0+(最新AFN) - 實現文件斷點下載

 
官方建議AFN的使用方法

 

 

0.導入框架準備工做  

•1. 將AFNetworking3.0+框架程序拖拽進項目
 
•2. 或使用Cocopod 導入AFNetworking3.0+
 
•3.  引入
#import "AFNetworking.h"

 

---->html

 

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- git

 

· AFNetworking3.0如下的版本使用方法能夠看我老版本的日誌:github

iOS- 利用AFNetworking(AFN) - 實現文件斷點下載

 

做者: 清澈Saup網絡

出處: http://www.cnblogs.com/qingche/框架

本文版權歸做者和博客園共有,歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。async

相關文章
相關標籤/搜索