大文件下载要使用NSURLConnection的代理方法
首先创建好url发出请求
//创建url
NSURL *url = [NSURL URLWithString:@"http://localhost:8080/TFServer/resources/videos/minion_01.mp4"];
//创建请求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//发出一个异步请求
[NSURLConnection connectionWithRequest:request delegate:self];
然后实现代理方法
得到服务器回应 应该在沙盒中的caches中创建一个空的文件
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
//拿到文件夹caches的沙盒路径
NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
//拿到文件的路径
NSString *filepath = [caches stringByAppendingPathComponent:@"minion_01.mp4"];
//拿到文件管理对象 单例
NSFileManager *manage = [NSFileManager defaultManager];
//创造这个文件
[manage createFileAtPath:filepath contents:nil attributes:nil];
//创建一个文件操作对象
self.handler = [NSFileHandle fileHandleForWritingAtPath:filepath];
//文件总长度
self.totalLength = response.expectedContentLength;
}
**NSFileHandle就像一个游标一样,每次移到文件的尾部,然后写入data
每次收到一个data就写入文件**
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
//把游标移动到文件尾部
[self.handler seekToEndOfFile];
//开始写入数据
[self.handler writeData:data];
self.fileLength += data.length;
}
在这里要关闭文件操作对象
-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
//关闭文件操作对象
[self.handler closeFile];
self.handler = nil;
}
时间: 2024-11-03 21:05:42