网络---大文件的下载(NSURLSession)
来源:互联网 发布:unity3d ugui官方demo 编辑:程序博客网 时间:2024/06/12 01:23
小文件的下载相对比较简单,但往往大文件的下载会比较常见,也相对来说比较复杂
利用NSUrlSession
NSURLSession * session = [NSURLSession sharedSession]; NSURL * url = [NSURL URLWithString:@"下载地址"]; [[session downloadTaskWithURL:url completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) { // cache路径(保存在Library下的caches中) NSString * caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; // 拼接文件路径 NSString * filePath = [caches stringByAppendingPathComponent:response.suggestedFilename]; // 下载完成后将文件移动到 filePath 上 NSFileManager * fileMgr = [NSFileManager defaultManager]; [fileMgr moveItemAtPath:location.path toPath:filePath error:nil]; }] resume];
注意:使用此方法并不能查看下载进度,如果想要实现下载进度,需使用下面方法
NSURLSessionConfiguration * config = [NSURLSessionConfiguration defaultSessionConfiguration]; // 通过设置代理的方法来实现 NSURLSession * session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil]; NSURL * url = [NSURL URLWithString:@"下载地址"]; [[session downloadTaskWithURL:url] resume];
#pragma mark --- NSURLSessionDownloadDelegate 代理方法
/** * 下载完毕后调用 * * @param location 临时文件的路径(下载好的文件) */- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{ // location : 临时文件的路径(下载好的文件) NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; // response.suggestedFilename : 建议使用的文件名,一般跟服务器端的文件名一致 NSString *file = [caches stringByAppendingPathComponent:downloadTask.response.suggestedFilename]; // 将临时文件剪切或者复制Caches文件夹 NSFileManager *mgr = [NSFileManager defaultManager]; // AtPath : 剪切前的文件路径 // ToPath : 剪切后的文件路径 [mgr moveItemAtPath:location.path toPath:file error:nil];}/** * 恢复下载时调用 */- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes{}/** * 每当下载完(写完)一部分时就会调用(可能会被调用多次) * * @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{ double progress = (double)totalBytesWritten / totalBytesExpectedToWrite; NSLog(@"下载进度---%f", progress);}
0 0
- 网络---大文件的下载(NSURLSession)
- 网络:NSURLSession 下载文件
- [iOS]网络之NSURLSession的文件下载
- iOS--NSURLSession下载大文件
- NSURLSession NSURLConnection下载大文件 断点下载
- NSURLConnection和NSURLSession大文件下载
- iOS网络--『文件下载、断点下载』的实现(二):NSURLSession
- iOS NSURLSession 实现网络请求-文件下载-上传-后台下载
- 网络:NSURLSession 下载进度
- [iOS]网络之NSURLSession的文件上传
- NSURLSession 下载文件 --Swift
- NSURLSession下载文件
- 网络---大文件的下载(NSURLConnection)
- 用NSUrlSession批量下载文件并保存文件的处理
- 网络:NSURLSession 的断点续传
- 利用 NSURLSession 实现文件下载
- NSURLSession下载文件—断点续传
- 利用NSURLSession请求/下载文件
- 【机房重构】——视图
- 递增数组相同的存入一个数组里面,把最后的结果放到一个大数组里面
- 封装一个UI控件的范例
- 一个小工具完成对memcached/kt/mongodb/redis的性能监测
- Servlet_01_介绍(续)
- 网络---大文件的下载(NSURLSession)
- LeetCode 206. Reverse Linked List
- 收集oracle统计信息
- 【深度学习介绍系列之二】——深度强化学习:卷积神经网络
- hdu acm 2202 最大三角形
- 高手问答,Java多线程编程设计模式篇
- 安卓 文件与缓存
- 在VS2015中用C++创建动态库并用C#调用
- Construct Binary Tree from Preorder and Inorder Traversal