2010-03-16 44 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