2010-03-16 46 views

回答

14

你不能暂停,但你可以取消一个连接,然后创建一个新的连接以恢复旧的停止位置。但是,您要连接的服务器必须支持Range标头。将其设置为“bytes = size_already_downloaded-”,并且它应该在你取消它的地方选取。

+0

很好的回答 – 2015-12-31 12:25:26

2

继续下载,并通过做这样的事情得到文件的其余部分可以设置在HTTP请求头中Range值:

- (void)downloadFromUrl:(NSURL*)url toFilePath:(NSString *)filePath { 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url  cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10]; 
    if (!request) { 
     NSLog(@"Error creating request"); 
     // Do something 
    } 
    [request setHTTPMethod:@"GET"]; 

    // Add header to existing file 
    NSFileManager *fm = [NSFileManager defaultManager]; 
    if([fm fileExistsAtPath:filePath]) { 
     NSError *error = nil;  
     NSDictionary * fileProp = [fm attributesOfItemAtPath:filePath error:&error]; 
     if (error) { 
      NSLog(@"Error: %@", [error localizedDescription]); 
      // Do something 
     } else { 
      // Set header to resume 
      long long fileSize = [[fileProp objectForKey:@"NSFileSize"]longLongValue]; 
      NSString *range = @"bytes="; 
      range = [[range stringByAppendingString:[[NSNumber numberWithLongLong:fileSize] stringValue]] stringByAppendingString:@"-"]; 
      [request setValue:range forHTTPHeaderField:@"Range"]; 
     } 
    } 
    NSURLConnection * connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

    if (!connection) { 
     NSLog(@"Connection failed."); 
     // Do something 
    } 
} 

您也可以使用 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response检查现有文件是完全通过检查预期的大小下载:[response expectedContentLength];。如果大小匹配,您可能想要取消连接。

+0

Finaly找到了一个工作解决方案。非常感谢 :-) – byJeevan 2015-07-09 09:44:08