首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >iOS_NSURLSession从网络上下载资源,此程序下载的是视频

iOS_NSURLSession从网络上下载资源,此程序下载的是视频

作者头像
mikimo
发布于 2022-07-20 05:31:29
发布于 2022-07-20 05:31:29
47500
代码可运行
举报
文章被收录于专栏:iOS开发~iOS开发~
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验