博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2016 - 1- 23 大文件下载
阅读量:5019 次
发布时间:2019-06-12

本文共 2226 字,大约阅读时间需要 7 分钟。

---恢复内容开始---

一: 利用NSFileHandle对象实现大文件下载

 1.要了解NSFileHandle的用法,注意下载完要关闭这个对象。还要记得每次写入之前将它的文件指针挪位!

////  ViewController.m//  多值参数////  Created by Mac on 16/1/23.//  Copyright © 2016年 Mac. All rights reserved.//#define ZZFile  [ [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingString:@"minion_15.mp4"]#import "ViewController.h"@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIProgressView *proView;//@property (nonatomic, strong) NSMutableData *fileData;@property (nonatomic, assign) NSInteger contentLength;@property (nonatomic, assign) NSInteger currentLength;@property (nonatomic, strong) NSFileHandle *handle;//@property (nonatomic, strong) UIImage *image;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // 这种方法没法暂停,只适合下载小文件 NSURL *url = [[NSURL alloc] initWithString:@"http://120.25.226.186:32812/resources/videos/minion_15.mp4" ]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; // 设置connect的代理 [NSURLConnection connectionWithRequest:request delegate:self];}#pragma mark - NSURLConnect 的代理// connection接收到响应,此时应当创建数据准备拼接data- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse *)response{ NSHTTPURLResponse *newResponse = response; // 获得文件的总长度 self.contentLength = [newResponse.allHeaderFields[@"Content-Length"] integerValue]; // 创建一个空的文件 [[NSFileManager defaultManager] createFileAtPath:ZZFile contents:nil attributes:nil]; self.handle = [NSFileHandle fileHandleForWritingAtPath:ZZFile];}// 接收到了数据,这个方法会被多次调用,需要在这里拼接数据- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{// 接收到数据后写入文件 // 设置当前下载量 self.currentLength += data.length; // 制定文件的写入位置,在当前文件的最后面 [self.handle seekToEndOfFile]; // 写入数据 [self.handle writeData:data]; self.proView.progress = 1.0 * self.currentLength / self.contentLength; }// 下载完成- (void)connectionDidFinishLoading:(NSURLConnection *)connection{ // 下载完毕后需要关闭handle [self.handle closeFile]; self.handle = nil; self.currentLength = 0; }@end

 

转载于:https://www.cnblogs.com/BJTUzhengli/p/5154478.html

你可能感兴趣的文章
归并排序法
查看>>
spark开发生成EXE
查看>>
Vue 全家桶介绍
查看>>
Linux lsof命令 umount U盘
查看>>
CRC标准以及简记式
查看>>
SEO搜索引擎
查看>>
关于本地使用tomcat部署web应用,浏览器自动跳转为https的问题
查看>>
一、Text To Speech
查看>>
Java读取并下载网络文件
查看>>
github上构建自己的个人网站
查看>>
在word中粘贴的图片为什么显示不完整
查看>>
SQL Server 数据库的鼠标操作
查看>>
net软件工程师求职简历
查看>>
SQL SERVER BOOK
查看>>
JS基础回顾,小练习(判断数组,以及函数)
查看>>
多任务——进程
查看>>
WCF:如何将net.tcp协议寄宿到IIS
查看>>
WebAPI HelpPage支持area
查看>>
Path元素
查看>>
php_soap扩展应用
查看>>