美文网首页
3.NSURLSessionDownloadTask文件下载

3.NSURLSessionDownloadTask文件下载

作者: 峰子1994 | 来源:发表于2017-10-27 18:07 被阅读41次

    前言:

    1、回顾NSURLSessionTask
    2、NSURLSessionDownloadTask大文件之block下载
    3、NSURLSessionDownloadTask大文件之代理方法下载
    4、NSURLSessionDownloadTask大文件之代理方法实现断点续传下载
    

    1.回顾NSURLSessionTask:

    使用NSURLSession就需要用到NSURLSessionTask,所以关于Task的类和其子类的关系还是要了解的:


    image.png

    2.NSURLSessionDownloadTask大文件之block下载

    测试的API接口:[http://120.25.226.186:32812/resources/images/minion_08.png](http://120.25.226.186:32812/resources/images/minion_08.png) (因为Block的缺点,所以这里用并不打算图片文件作为测试)
    2-1、类、方法、属性介绍:
    NSURLSession
     +(NSURLSession*)sharedSession; 单例,直接创建会话session对象
      -(NSURLsessionDownloadTask*)downloadTaskWithURL:completionHandler:; 根据URL来创建会话的下载任务downloadTask,完成的话回调block
    NSURLsessionDownloadTas
    - (void)resume;
    

    2.2源码下载:

    image.png

    2.3 Block的缺点:

    Block下载方式不适合大文件下载,因为该方法需要等到文件下载完毕了,
    才会回调completionHandler后面的block参数,
    然后才可以在这个block参数可以获取location(文件下载缓存的路径)、response(响应)、error(错误信息)。
    这样的话,对于大文件,我们就无法实时的在下载过程中获取文件的下载进度了。
    

    2.NSURLSessionDownloadTask大文件之代理方法下载

    测试的API接口:[http://120.25.226.186:32812/resources/videos/minion_02.mp4](http://120.25.226.186:32812/resources/videos/minion_02.mp4)  (这回用的是大文件哦,但也不会太大,本篇基础练习用,不会让你下载都要花个好几十分钟以上的时间😉)
    3-1、类、方法、属性:
    NSURLSession
          +(NSURLSession*)sessionWithConfiguration:delegate:delegateQueue:;     根据会话配置对象并设置代理和代理的执行队列来创建会话NSURLSession对象
          - (NSURLSessionDownloadTask*)downloadTaskWithURL;           根据URL直接创建会话的任务
        NSURLSessionConfiguration
          +(NSURLSessionConfiguration*)defaultSessionConfiguration;         创建默认的会话配置对象
        NSURLSessionDownloadTask
          - (void)resume                                 执行会话任务
           协议和代理方法:
        <NSURLSessionDownloadDelegate> 
        -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask          didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
           session当前会话  downloadTask当前会话任务  bytesWritten本次写入数据大小  totalBytesWritten已经写入数据大小  totalBytesExpectedToWrite要下载的文件总大小
        -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask               didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes
           didResumeAtOffset恢复下载时调用的代理方法
        -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask                             didFinishDownloadingToURL:(NSURL *)location
           didFinishDownloadingToURL:(NSURL *)location  内部已经实现了边下载边写入数据到沙盒的操作
           downloadTask                    内部时可以拿到响应头信息
        -(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
           请求失败返回错误信息调用的代理方法
    

    3.2源码实现:


    image.png

    4、NSURLSessionDownloadTask大文件之代理方法实现断点续传下载

    相关文章

      网友评论

          本文标题:3.NSURLSessionDownloadTask文件下载

          本文链接:https://www.haomeiwen.com/subject/azldpxtx.html