2010-03-16 12 views
10

में डाउनलोड कार्यक्षमता फिर से शुरू करें मैं NSURLConnection क्लास के साथ सर्वर से कुछ बहुत बड़ा डेटा डाउनलोड कर रहा हूं।NSURLConnection

मैं एक विराम सुविधा कैसे कार्यान्वित कर सकता हूं ताकि मैं डाउनलोड फिर से शुरू कर सकूं?

+0

क्या आप विराम सुविधा को लागू करने में सफल रहे हैं? –

उत्तर

14

आप रोक नहीं सकते हैं, प्रति-से, लेकिन आप एक कनेक्शन रद्द कर सकते हैं, और फिर पुराने बाएं बंद होने के लिए फिर से शुरू करने के लिए एक नया बना सकते हैं। हालांकि, जिस सर्वर से आप कनेक्ट कर रहे हैं उसे रेंज हेडर का समर्थन करना होगा। इसे "बाइट्स = size_already_downloaded-" पर सेट करें, और इसे ठीक से उठाया जाना चाहिए जहां आपने इसे रद्द कर दिया था।

+0

बहुत अच्छा जवाब –

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