網絡篇-NSURLSessionDownloadTask進度下載(續上節)

簡述:服務器

在上一節中介紹了一下NSURLSession,也介紹了一下NSURLSessionDownloadTask的普通下載圖片使用,並無使用到具備進度的下載,那麼在這一節中,咱們看看如何使用進度下載,實時的進行界面的更新,這裏的界面的更新也就是咱們的Progress View(進度條)控件進度的一個更新session

代碼:atom

一、首先在storyboard裏面拖入一個Progress View(進度條)控件,而且在控制器中拖入Progress View屬性,用於後面的界面更新
    @interface ViewController ()<NSURLSessionDownloadDelegate>
        @property (weak, nonatomic) IBOutlet UIProgressView *progressView;
    @end
二、完成上面的步驟了,那麼如今就是進行三部曲了
    2.一、建立NSURLSession
    2.二、建立任務(task)
    2.三、執行任務

    - (void)viewDidLoad {
        [super viewDidLoad];
        // 1.建立NSURLSession
        /*
         第一個參數: 全局的配置
         第二個參數: 讓誰成爲session的代理
         第三個參數: 告訴系統代理方法在哪一個線程中執行
         */
        //1.1建立URL
        NSURL *url = [NSURL URLWithString:@"http://d.pcs.baidu.com/file/2b66fa1c93d8322d5299a1befc59b16c?fid=204559171-250528-1042286675318370&time=1453435914&rt=sh&sign=FDTAERV-DCb740ccc5511e5e8fedcff06b081203-X%2Bcz8N4IQb25c4wIKAyYl1HHW2M%3D&expires=8h&chkv=1&chkbd=0&chkpc=&dp-logid=498837374116132296&dp-callid=0&r=107651804"];
        NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
        // 二、利用NSURLSessionDownloadTask建立任務(task)
        NSURLSessionDownloadTask *task = [session downloadTaskWithURL:url];
        // 三、執行任務
        [task resume];
    }
三、基本上到這裏就是設置代理了,代理一運行,咱們就完事了,
    /*
     1.接收到服務器返回的數據
         bytesWritten: 當前這一次寫入的數據大小
         totalBytesWritten: 已經寫入到本地文件的總大小
         totalBytesExpectedToWrite : 被下載文件的總大小
     */
    - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
    {
        //給progressView賦值進度
        self.progressView.progress = 1.0 * totalBytesWritten / totalBytesExpectedToWrite;
    }

    /*
     2.下載完成
         downloadTask:裏面包含請求信息,以及響應信息
         location:下載後自動幫我保存的地址
     */
    - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
    {
        //location爲下載好的文件路徑
        //NSLog(@"didFinishDownloadingToURL, %@", location);


        //一、生成的Caches地址
        NSString *cacepath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingString:downloadTask.response.suggestedFilename];
        //二、移動圖片的存儲地址
        NSFileManager *manager = [NSFileManager defaultManager];
        [manager moveItemAtURL:location toURL:[NSURL fileURLWithPath:cacepath] error:nil];

    }

    /*
     3.請求完畢
        若是有錯誤, 那麼error有值
     */
    - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
    {
        if (!error) {
            NSLog(@"請求成功");
        }else{
            NSLog(@"請求失敗");
        }

    }

補充
在代理中,咱們有兩個重要的代理方法:url

  • 第一個接受服務器返回的數據,裏面的話給咱們傳過來三個參數:
  • 一、當前返回數據的大小
  • 二、已經寫入臨時文件數據的大小
  • 三、下載數據的總大小

那麼在這個代理方法裏面就是設置好咱們Progress View(進度條)控件的進度的,只要第二個重要的代理方法就是線程

  • 第二個就是下載完成以後,回調的方法,裏面傳給咱們兩個參數:3d

  • 一、請求信息已經響應信息
  • 二、下載完,文件保存的路徑(路徑爲咱們沙盒的temp臨時文件夾,裏面的數據隨時可能被刪除)代理

咱們能夠在這個方法中把所下載的文件,移動到某一個長期保存而不會隨時刪除的文件夾中,這裏我是把它保存到咱們的Caches中去了code

結束圖片

本章到此結束
            歡迎各位碼友隨意轉載並指正
相關文章
相關標籤/搜索