NSURLSession从网络上下载资源,此程序下载的是视频
#import "ViewController.h" @interface ViewController ()<NSURLSessionDelegate, NSURLSessionDownloadDelegate> @property (weak, nonatomic) IBOutlet UIProgressView *progressView; //进度条
@property(nonatomic, strong) NSURLSessionTask *downLoadTask; //下载任务 @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; /***************** SessionConfiguration会话配置 *****************/
//1. 设置工作模式, 分为3种
//defaultSessionConfiguration: 一般模式, 可以使用缓存的Cache, Cookie, 鉴权
//ephemeralSessionConfiguration: 及时模式, 不使用缓存的Cache, Cookie, 鉴权
//backgroundSessionConfigurationWithIdentifier: 后台模式, 完成上传下载, 需要给一个ID, 用于追踪完成工作的Session是哪一个(当程序切到后台, 这个任务也会继续下载)
//一般模式
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; /***************** URLSession网络设置 *****************/
//2. 创建NSURLSession
//粒度低
// NSURLSession *session = [NSURLSession sessionWithConfiguration:config];
//粒度高
NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
//设置mainQueue就能在主线程进行回调非常的方便 /***************** URLRequest网址请求对象 *****************/
NSURL *url = [NSURL URLWithString:@"http://hc25.aipai.com/user/656/20448656/6167672/card/25033081/card.mp4?l=a"];
//3. 创建网址请求对象
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; /***************** 会话任务 *****************/
//4. 根据职能不同Task有三种
// (1)NSURLSessionUploadTask: 上传用的Task, 传完以后不会再下载返回结果
// (2)NSURLSessionDownloadTask: 下载用的Task
// (3)NSURLSessionDataTask: 可以上传内容, 上传完成后再进行下载??????? // 创建一个给定的请求下载任务
self.downLoadTask = [session downloadTaskWithRequest:urlRequest]; // 创建一个下载任务来下载给定的网址的内容
// self.downLoadTask = [session downloadTaskWithURL:url];
// 创建 和 恢复数据的下载任务
// self.downLoadTask = [session2 downloadTaskWithResumeData:data];
} #pragma mark 开始下载
- (IBAction)startAction:(UIButton *)sender {
//得到task后, 调用resume开始工作
[self.downLoadTask resume];
} #pragma mark 暂停下载
- (IBAction)suspendAction:(UIButton *)sender {
[self.downLoadTask suspend];
} #pragma mark 恢复下载
- (IBAction)resumeAction:(UIButton *)sender {
[self.downLoadTask resume];
} /***************** NSURLSessionDownloadDelegate代理方法 *****************/
#pragma mark 下载完成后调用的方法
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {
NSLog(@"下载存放的临时路径 = %@", location.path); //将下载好的.tmp缓存文件, 存成
NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;
//创建新文件路径
NSString *imagePath = [cachesPath stringByAppendingString:@"/image.mp4"];
//文件管理器
NSFileManager *fileManger = [NSFileManager defaultManager];
//将下载号的缓存文件caches移动到新文件里
[fileManger moveItemAtPath:location.path toPath:imagePath error:nil];
NSLog(@"转存后的路径 = %@", imagePath);
} /**
* 每下载完一部分文件后就会触发的方法
*
* @param session 会话
* @param downloadTask 下载任务
* @param bytesWritten 下载速度
* @param totalBytesWritten 已经下载多少
* @param totalBytesExpectedToWrite 文件总大小
*/
-(void)URLSession:(NSURLSession *)session
downloadTask:(NSURLSessionDownloadTask *)downloadTask
didWriteData:(int64_t)bytesWritten
totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite { NSLog(@"速度:%lld kb/s, 已经下载:%lldkb 总大小:%lldkb ", bytesWritten/1024, totalBytesWritten/1024, totalBytesExpectedToWrite/1024); //已经下载 / 总大小
self.progressView.progress = (double)totalBytesWritten/totalBytesExpectedToWrite;
}
NSURLSession从网络上下载资源,此程序下载的是视频的更多相关文章
- 如何使用微信小程序video组件播放视频
相信很多人都有在手机上看视频的习惯,比较看视频更真实更形象.那么我们在微信小程序中如何观看视频呢?这就需要video组件的帮忙了.今天我们就给大家演示一下,如何用微信小程序组件video播放视频.我们 ...
- JWebFileTrans(JDownload): 一款可以从网络上下载文件的小程序(二)
一 前言 本文是上一篇博客JWebFileTrans:一款可以从网络上下载文件的小程序(一)的续集.此篇博客主要在上一篇的基础上加入了断点续传的功能,用户在下载中途停止下载后,下次可以读取断点文件, ...
- JWebFileTrans(JDownload): 一款可以从网络上下载文件的小程序(三),多线程断点下载
一 前言 本篇博客是<JWebFileTrans(JDownload):一款可以从网络上下载文件的小程序>系列博客的第三篇,本篇博客的内容主要是在前两篇的基础上增加多线程的功能.简言之,本 ...
- JDownload: 一款可以从网络上下载文件的小程序第四篇(整体架构描述)
一 前言 时间过得真快,距离本系列博客第一篇的发布已经过去9个月了,本文是该系列的第四篇博客,将对JDownload做一个整体的描述与介绍.恩,先让笔者把记忆拉回到2017年年初,那会笔者在看Unix ...
- you-get 下载网络上的富媒体信息
You-Get 乃一小小哒命令行程序,提供便利的方式,下载网络上的富媒体信息. 利用you-get下载这个网页的视频: $ you-get http://www.fsf.org/blogs/rms/2 ...
- ios开发网络学习十二:NSURLSession实现文件上传
#import "ViewController.h" // ----WebKitFormBoundaryvMI3CAV0sGUtL8tr #define Kboundary @&q ...
- phonegap文件,目录操作以及网络上传,下载文件(含demo)
正在做一个跨平台的应用,需要使用phonegap进行文件的一些基本操作. 需求如下:可以选择本地图片,或者从相机选择图片,并进行显示在本地,然后上传到服务器,以及可以从服务器下载图片显示出来,如果本地 ...
- 使用NSURLSession获取网络数据和下载文件
使用NSURLSession获取网络数据 使用NSURLSession下载文件
- Ninject之旅之十二:Ninject在Windows Form程序上的应用(附程序下载)
摘要: 下面的几篇文章介绍如何使用Ninject创建不同类型的应用系统.包括: Windows Form应用系统 ASP.NET MVC应用系统 ASP.NET Web Form应用系统 尽管对于不同 ...
随机推荐
- Java中如何将String转成Date
Java中如何将String转成Date 最近在开发Json数据反序列化为Java对象的时候发现spring mvc 和 Jackson 对Date类型对支持不是特别好,虽然在Java对象序列化为Js ...
- shell脚本二
在shell脚本一 中,我讨论了shell脚本的语法规范,shell脚本的变量,以及shell脚本的测试语句. 仅仅懂得这些只能写简单的脚本,在简单的脚本中各条语句按顺序执行,从而实现自动化的管理,顺 ...
- 一图看懂host_only nat bridge拓扑结构
VMware三种模式 我们在使用VMware时经常能看到三种网络的连接模式:Bridged Host-Only Nat,它们都有什么作用,网络拓扑是怎样的?怎样才能让他们上网,他们相互间能不能相互访 ...
- 序列不包含任何元素,c#,支付宝
序列不包含任何元素 我的是代码原因,由于访问数据库取出数据为空列表,然而我并没有判断列表是否为空,直接取First,所以才会有这个提示 解决方案:先判断列表是否为空,再取值,如果为空,要给商品名称赋默 ...
- Razor练习3
Razor语法中,物质循环处理,它使用到三种: for, while,foreach. 下面Insus.NET分别在ASP.NET MVC环境中列举一个例子,附加源代码: while:<br / ...
- 使用NISI制作.Net程序服务安装包
1.开篇之前先说一说NISI是什么. NSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 系统下安装程序制作程序.它提供了安装.卸载.系统设置 ...
- Android Volley框架的使用(1)
在Android开发中,经常要通过HTTP请求访问网络.为了使通过HTTP请求访问网络的过程更加简单,2013年提出了新的HTTP通信框架--Volley.Volley使用起来非常简单,适用于网络访问 ...
- MUI(2)
本篇博文是继续MUI(1)博文. 上一篇博文小编写了两个页面,一个页面只写了一个头部导航栏,另一个页面写了一个按钮,然后这两个页面进行合并显示,即在头部导航栏页面加载显示另一个页面的按钮.仔细观察上一 ...
- POJ 3276 Face The Right Way 反转
大致题意:有n头牛,有些牛朝正面,有些牛朝背面.现在你能一次性反转k头牛(区间[i,i+k-1]),求使所有的牛都朝前的最小的反转次数,以及此时最小的k值. 首先,区间反转的顺序对结果没有影响,并且, ...
- 简单的mysql查询
mysql是基于客户机-服务器的数据库.客户机-服务器应用分为两个不同的部分.服务器部分是负责所有数据访问和处理的一个软件. 连接mysql 要连接mysql需要知道如下 主机名: 本地为localh ...