iOS中下载大型文件的原理解析二
在iOS中下載大型文件,需要使用NSURLConnection 的代理方法:
(void)touchesBegan:(NSSet)touches withEvent:(UIEvent *)event {
NSURL *url = [NSURL URLWithString:@”http://d.3987.com/fengj_141112/007.jpg“];
NSURLRequest *request = [NSURLRequest requestWithURL:url];[NSURLConnection connectionWithRequest:request delegate:self];
}(void)connection:(NSURLConnection )connection didFailWithError:(NSError )error {
NSLog(@”didFailWithError:%@”, [NSThread currentThread]);
}
(void)connection:(NSURLConnection )connection didReceiveResponse:(NSURLResponse )response {
NSLog(@”didReceiveResponse:%@”, [NSThread currentThread]);NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath = [caches stringByAppendingPathComponent:@”videos.zip”];
NSFileManager * fileManager = [NSFileManager defaultManager];
[fileManager createFileAtPath:filePath contents:nil attributes:nil];self.writeHandle = [NSFileHandle fileHandleForWritingAtPath:filePath];
self.fileLength = response.expectedContentLength;
}(void)connection:(NSURLConnection )connection didReceiveData:(NSData )data {
NSLog(@”didReceiveData:%@”, [NSThread currentThread]);
[self.writeHandle seekToEndOfFile];
[self.writeHandle writeData:data];self.currentLength += data.length;
NSLog(@”下載進度: %f”, (double)self.currentLength / self.fileLength);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSLog(@”connectionDidFinishLoading:%@”, [NSThread currentThread]);
self.currentLength = 0;
self.fileLength = 0;
[self.writeHandle closeFile];
self.writeHandle = nil;
}
總體思路:
(1)首先創建一個空的文件:
NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath = [caches stringByAppendingPathComponent:@”videos.zip”];
NSFileManager * fileManager = [NSFileManager defaultManager];
[fileManager createFileAtPath:filePath contents:nil attributes:nil];
(2)其次獲取操作這個文件的句柄
self.writeHandle = [NSFileHandle fileHandleForWritingAtPath:filePath];
(3)當數據到來后,需要將其寫入到文件中去
[self.writeHandle seekToEndOfFile];
[self.writeHandle writeData:data];
(4)最后在文件下載完畢后,需要關閉文件
[self.writeHandle closeFile];
總結
以上是生活随笔為你收集整理的iOS中下载大型文件的原理解析二的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何用JS和HTML 做一个桌面炒股小插
- 下一篇: 【其他】按键精灵9之网页账户登入刷投票