2012-11-23 13 views
7

मैं कतार का उपयोग करके AFNetworking का उपयोग करके कुछ फ़ाइलों को डाउनलोड कर रहा हूं। यहाँ मेरी कोड है:AFNetworking + queue + रद्द करें ऑपरेशन + जंक फ़ाइलें

apiClient =[[AFHTTPClient alloc]initWithBaseURL: [NSURL URLWithString:ZFREMOTEHOST]]; 
    for (NSString *element in self.productsArray) { 
      NSURL *url = [NSURL URLWithString:element]; 
      NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

      op = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 

      NSString *documentsDirectory = nil; 
      NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
      documentsDirectory = [paths objectAtIndex:0]; 

      NSString *targetFilename = [url lastPathComponent]; 
      NSString *targetPath = [documentsDirectory stringByAppendingPathComponent:targetFilename]; 

      op.outputStream = [NSOutputStream outputStreamToFileAtPath:targetPath append:NO]; 

      [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 

      } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
       //failure case 
       NSLog(@"BaaZ File NOT Saved %@", targetPath); 

       //remove the file if saved a part of it! 
       NSFileManager *fileManager = [NSFileManager defaultManager]; 
       [fileManager removeItemAtPath:targetPath error:&error]; 

       if (error) { 
        NSLog(@"error dude"); 
       } 

       if ([operation isCancelled]) { 
        //that doesn't work. 
        NSLog(@"Canceled"); 
       } 
      }]; 

      [op setDownloadProgressBlock:^(NSInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { 
       if (totalBytesExpectedToRead > 0) { 
        dispatch_async(dispatch_get_main_queue(), ^{ 
         self.progressView.alpha = 1; 
         self.progressView.progress = (float)totalBytesRead/(float)totalBytesExpectedToRead; 
         NSString *label = [NSString stringWithFormat:@"Downloaded %lld of %lld bytes", totalBytesRead,totalBytesExpectedToRead]; 
         self.progressLabel.text = label; 
        }); 
       } 
      }]; 
     [self.resourcesArray addObject:op]; 

     } 
    for (AFHTTPRequestOperation *zabols in self.resourcesArray) { 
     [apiClient.operationQueue addOperation:zabols]; 
    } 

कोड को डाउनलोड फ़ाइल पर ठीक काम कर रहा है, लेकिन मैं कुछ कार्यक्षमता को रद्द तो मैं एक एक्शन नीचे कोड है कि के साथ एक बटन है चाहता हूँ:

[apiClient.operationQueue cancelAllOperations]; 

कार्यवाही रद्द फ़ाइल लेकिन फिर दस्तावेज़ फ़ोल्डर पर कुछ जंक फ़ाइलें हैं। जंक कहकर मेरा मतलब है कि फ़ाइल डाउनलोड करना शुरू कर दिया है, मैंने उन्हें रद्द कर दिया है और मुझे एक ही नाम के साथ एक फाइल मिलती है लेकिन बेकार नहीं किया जा सकता क्योंकि यह क्षतिग्रस्त है।

मैं एएफ को ऐसा करने से कैसे रोक सकता हूं और इसे रद्द करने पर केवल पूर्ण फ़ाइलों को ही रख सकता हूं?

कोई भी मदद आभारी होगी।

for (AFHTTPRequestOperation *ap in apiClient.operationQueue.operations) { 
     [ap cancel]; 
     NSLog(@"%@",ap.responseFilePath); 
     NSFileManager *fileManager = [NSFileManager defaultManager]; 
     [fileManager removeItemAtPath:ap.responseFilePath error:nil]; 

    } 

और जंक फ़ाइलों को हटाने लेकिन है कि या तो काम नहीं करता:

भी ऐसे ही काम से काम को रद्द करने की कोशिश की।

+1

आप चाहते हैं junks हटाए जाने के लिए या पूरी तरह से क्षतिग्रस्त नहीं डाउनलोड की गई फ़ाइलों? –

+0

हाँ ठीक है मैंने भी अंतिम संपत्ति के साथ कोशिश की लेकिन यह उन्हें डाउनलोड कर रहा है भले ही मैंने उन्हें रद्द कर दिया हो! – zaabalonso

उत्तर

7

AFDownloadRequestOperation एक्सटेंशन का उपयोग करने का प्रयास करें, इसके अतिरिक्त यह आंशिक डाउनलोड फिर से शुरू करने का समर्थन करता है, एक अस्थायी निर्देशिका का उपयोग करता है और इसमें एक विशेष ब्लॉक है जो सही डाउनलोड प्रगति की गणना करने में मदद करता है।

+0

वाह यह अच्छा लग रहा है! इसे साझा करने के लिए धन्यवाद। –

+0

बहुत दोस्त धन्यवाद! मैं इसे आज़मा दूंगा! – zaabalonso

-1

तुम भी है कि कोशिश कर सकते हैं: github

+0

कोड यहां जोड़ने के लिए बहुत बड़ा है और किसी की मदद कर सकता है इसलिए इसे यहां जोड़ा गया है! आपकी क्या सलाह है? – zaabalonso

संबंधित मुद्दे