#import "ViewController.h"@interface ViewController ()<NSURLSessionDownloadDelegate,NSURLSessionDownloadDelegate>
///显示图片的
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
///显示进度的
@property (weak, nonatomic) IBOutlet UISlider *progressView;
///下载任务的属性
@property (nonatomic,strong)NSURLSessionDownloadTask *task;
///网络请求类
@property
(nonatomic,strong)NSURLSession *session;///发送请求类
@property(nonatomic,strong)NSURLRequest *request;
///用于保存已经下载的数据的,供继续下载使用@property (nonatomic,strong)NSMutableData *data;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.//self.progressView.value = 0;
}
#pragma mark - 开始下载
- (IBAction)startDownLoad:(id)sender {NSString *urlStr = @"https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1464602004&di=2f52d829b167189d005b506a96fbd87e&src=http://imgsrc.baidu.com/forum/pic/item/b15db8a1cd11728b829819d0c8fcc3cec2fd2c6c.jpg";NSURL *url = [NSURL URLWithString:urlStr];//初始化请求self.request = [NSURLRequest requestWithURL:url];//创建NSURLSessionNSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];self.session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:[NSOperationQueue mainQueue]];
//    NSURLSessionTask *task = [session dataTaskWithRequest:self.request];//下载请求任务self.task = [self.session downloadTaskWithRequest:self.request];//开启[_task resume];}
#pragma mark - 暂停下载
- (IBAction)pauseDownLoad:(id)sender {//暂停if (self.task ) {//暂停并保存之前已经下载的内容__weak typeof(self)weakSelf = self;[self.task cancelByProducingResumeData:^(NSData * _Nullable resumeData) {weakSelf.data = [NSMutableData dataWithData:resumeData];}];}//暂停任务[_task suspend];
}
#pragma mark - 继续下载
- (IBAction)continueDownLoad:(id)sender {//判断当前任务是否有,是发送请求还是处理数据if (self.task != nil) {//说明已经下载,这里要处理的就是数据self.task = [self.session downloadTaskWithResumeData:self.data];} else {//此时没有下载任何内容,应该重新发送请求进行下载self.task = [self.session downloadTaskWithRequest:self.request];}//启动[self.task resume];
}#pragma mark - 代理方法
//下载完成走的方法
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {NSLog(@"%@",location);// 设置文件的存放目标路径NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;NSURL *documentsDirectoryURL = [NSURL fileURLWithPath:documentsPath];NSURL *fileURL = [documentsDirectoryURL URLByAppendingPathComponent:[[downloadTask.response URL] lastPathComponent]];//使用// 如果该路径下文件已经存在,就要先将其移除,在移动文件NSFileManager *fileManager = [NSFileManager defaultManager];if ([fileManager fileExistsAtPath:[fileURL path] isDirectory:NULL]) {[fileManager removeItemAtURL:fileURL error:NULL];}//让documents文件也有一份下载的文件[fileManager moveItemAtURL:location toURL:fileURL error:NULL];self.imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:fileURL]];NSLog(@"%@",fileURL);
}
//下载中
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite {//下载当前段的数据NSLog(@"bytesWritten=%lld",bytesWritten);//已经下载的总数据量NSLog(@"totalBytesWritten=%lld",totalBytesWritten);//总进度NSLog(@"totalBytesExpectedToWrite=%lld",totalBytesExpectedToWrite);//设置progressView的进度值self.progressView.value = (CGFloat)totalBytesWritten/(CGFloat)totalBytesExpectedToWrite;
}@end

运行结果如图:

转载于:https://www.cnblogs.com/zhun/p/5544355.html

iOS之NSURLSessionDownloadTask下载相关推荐

  1. iOS教程:详解iOS多图下载的缓存机制

    ios教程,ios的干货一直来不及给大家分享,小编也是一直在忙啊!今天给大家献上ios:详解iOS多图下载的缓存机制 1. 需求点是什么? 这里所说的多图下载,就是要在tableview的每一个cel ...

  2. 仿IOS介绍APP下载页源码

    简介: 仿IOS介绍APP下载页源码 网盘下载地址: http://kekewangLuo.cc/etChSUGbyoU0 图片:

  3. 软件配置 | ios系统Clion下载、安装、配置环境

    软件配置 软件配置 | ios系统Clion下载.安装.配置环境 软件配置 下载.安装 g++ Clion 调试 参考链接 下载.安装 调试 本文总结ios系统下Clion下载.安装.配置环境过程和可 ...

  4. ios应用内下载并安装另一个应用

    ios黑科技之实现91助手的效果(app内下载并安装另一个app) 今天分享一个非常牛逼,非常装逼的黑科技--ios应用内下载并安装另一个应用,中间不需要经过appstore. 其实这个技术,就是我们 ...

  5. 道高一尺魔高一丈:iOS破解应用下载中心AppTrackr VS. 苹果

    据国外媒体报道,最受欢迎的iOS破解应用下载中心AppTrackr,日前通过其最具革命性的破解软件安装工具Installous发表声明称,苹果已对他们网站上的大量破解应用发出了下架通知,再次大力打击破 ...

  6. 仿 IOS 桌面图标下载 view

    DownloadLoadingView 项目地址:xiaweizi/DownloadLoadingView  简介:仿 IOS 桌面图标下载 view 更多:作者   提 Bug 标签: 在工作中难免 ...

  7. uniapp canvas踩雷 文字模糊 图片不显示 ios系统无法下载

    uniapp小程序项目中使用canvas实现本地保存海报 1.问题一,使用canvas保存到本地的图片中文字模糊 解决: <canvas :style="{width:windowW+ ...

  8. 一款非常经典的rpg武侠游戏ios源码下载

    今天给大家分享一款非常经典的rpg武侠游戏ios源码下载,希望大家会喜欢. 源码下载: http://code.662p.com/view/2115.html

  9. 钉钉企业内部H5应用IOS点击下载pdf附件后乱码问题

    IOS点击下载pdf附件按钮后会出现如下问题,安卓会跳转到浏览器页面下载pdf文件不会出现乱码问题 前端的下载操作按钮 ExportPDF(){postAction(this.exportPdfUrl ...

最新文章

  1. R语言ggplot2可视化:使用长表数据(窄表数据)( Long Data Format)可视化多个时间序列数据、在同一个可视化图像中可视化多个时间序列数据(Multiple Time Series)
  2. 推送通知_手机总是收到烦人的推送,教你几招,彻底摆脱无用通知
  3. psql error: psql: symbol lookup error: psql: undefined symbol: PQconnectdbParams
  4. qt-sdk-linux,在linux系统上安装qt-sdk步骤.doc
  5. pygame-KidsCanCode系列jumpy-part6-主角挂掉重新开始
  6. 怎么看linux的命令说明,在linux下,怎么用命令来查看版本?
  7. 利用html制作通讯录_动漫制作软件哪些好用?动漫制作软件推荐
  8. piap.excel 微软 时间戳转换mssql sql server文件时间戳转换unix 导入mysql
  9. c 调用java map_如何从C中的map迭代器调用类成员函数?
  10. 华师c语言程序设计作业,华师《C语言程序设计》练习题库答案
  11. PLUTO SDR入门系列之九:强大的开源软件“gnu radio”
  12. 戏谈编程:那些程序员的级别陷阱,你遇到过吗
  13. 自学php多久可以工作_php自学要多久,学php难吗,多久能学会?
  14. 【魔方攻略】镜面魔方教程(原创)
  15. java swing paint_Java Paint未在Swing中绘制
  16. C# Winform 文本面板带滚动条
  17. java excel 列数_JAVA使用POI获取Excel的列数与行数
  18. appt命令检测Apk信息的方法
  19. Jython-在JAVA调用Python脚本使用方法详解+示例代码
  20. 你真的能在JAVA开发这条路上面一直坚持下去吗?

热门文章

  1. postgresql常用函数及操作符及类型转换
  2. [转]Hspice 语法手册
  3. 10个最佳jQuery Lightbox效果插件收集
  4. 选择嵌套_还不会if函数的嵌套判断,学会这方法,就跟复制粘贴一样简单
  5. cookie文件存放在服务器端,cookie存储在客户端还是服务器
  6. 面向对象(final/抽象类/接口/内部类)
  7. wordpress汉化技巧_保护您的WordPress网站的6个技巧
  8. 额外sql使用什么封装_为什么建立社区值得付出额外的努力
  9. 开发之前需要哪些文档_为什么在开发之前总是应该做文档
  10. 非洲做生意进货渠道_WikiFundi如何帮助非洲人民为维基百科做贡献