#define File [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"box_minion_10.mp4"]
@interface ViewController () <NSURLConnectionDataDelegate>
/** 文件的总长度 */
@property (nonatomic, assign) NSUInteger contentLength;
/** 当前下载的总长度 */
@property (nonatomic, assign) NSUInteger currentLength;
/** 文件句柄对象 */
@property (nonatomic, strong) NSFileHandle *handle;
@end
- (void)downloadVideo{
NSURL *url = [NSURL URLWithString:@"http://www.example.com:8080/resources/videos/minion_10.mp4"];
[NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:url] delegate:self];
}
#pragma mark - <NSURLConnectionDataDelegate>
/**
* 接收到响应的时候:创建一个空的文件
*/
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse *)response{
// 获得文件的总长度
self.contentLength = [response.allHeaderFields[@"Content-Length"] integerValue];
// 创建一个空的文件
[[NSFileManager defaultManager] createFileAtPath:File contents:nil attributes:nil];
// 创建文件句柄
self.handle = [NSFileHandle fileHandleForWritingAtPath:File];
}
/**
* 接收到具体数据:马上把数据写入一开始创建好的文件
*/
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
// 指定数据的写入位置 -- 文件内容的最后面
[self.handle seekToEndOfFile];
// 写入数据
[self.handle writeData:data];
// 拼接总长度
self.currentLength += data.length;
// 进度
CGFloat progress = 1.0 * self.currentLength / self.contentLength;
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"%@",File);
// 2016-08-07 15:18:40.104 大文件下载[53862:817163] /Users/zhaoyingxin/Library/Developer/CoreSimulator/Devices/1146129D-06F4-457B-83AC-B97F3B7ECA32/data/Containers/Data/Application/9BE72A92-EBD5-459F-B0A9-D3317422DD86/Library/Caches/box_minion_10.mp4
// 关闭handle
[self.handle closeFile];
self.handle = nil;
// 清空长度
self.currentLength = 0;
self.contentLength = 0;
}