美文网首页
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文件下载

    前言: 1.回顾NSURLSessionTask: 使用NSURLSession就需要用到NSURLSession...

  • Android 零碎知识点和技巧

    使用DownloadManager下载文件 下载文件 监听下载结果 文件下载断点续传 1.获取已下载的文件长度. ...

  • js文件下载

    1.文件流下载 根据后台接口文件流下载 调用 2.文件地址下载 根据文件地址下载文件 调用 3.base64流下载...

  • wget下载数据

    下载单个文件 -nc: 继续下载中断的操作 下载目录下面所有文件 下载多个文件:

  • 文件下载

    由于不同的浏览器兼容不同,对于直接a标签下载文件,有的浏览器可以,有的浏览器会直接播放。为了保证下载操作的正确执行...

  • 文件下载

    常见的文件格式: 文件下载HTML 图片文件下载PHP

  • 文件下载

    IOUtils 的对应包 需要关闭流的对象放在try()内不用写关闭代码

  • 文件下载

    文件下载是实际项目中经常用的一个接口,不同于图片下载客户端自己保存就可以了,需要开放对应的接口。同时,一般会结合P...

  • 文件下载

    1.小文件下载 1.1下载方式 【NSData dataWithContentsOfURL:】 [NSURLCon...

  • 文件下载

网友评论

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

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