大文件下載要使用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;
}