AFNetworking的重啓程序斷點續傳

//獲取已下載的文件大小 
- (unsigned long long)fileSizeForPath:(NSString *)path { 
    signed long long fileSize = 0; 
    NSFileManager *fileManager = [NSFileManager new]; // default is not thread safe 
    if ([fileManager fileExistsAtPath:path]) { 
        NSError *error = nil; 
        NSDictionary *fileDict = [fileManager attributesOfItemAtPath:path error:&error]; 
        if (!error && fileDict) { 
            fileSize = [fileDict fileSize]; 
        } 
    } 
    return fileSize; 

        //開始下載 
- (void)startDownload { 
    NSString *downloadUrl = @"http://www.xxx.com/xxx.zip"; 
    NSString *cacheDirectory = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *downloadPath = [cacheDirectory stringByAppendingPathComponent:@"xxx.zip"]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:downloadUrl]]; 
    //檢查文件是否已經下載了一部分 
    unsigned long long downloadedBytes = 0; 
    if ([[NSFileManager defaultManager] fileExistsAtPath:downloadPath]) { 
    //獲取已下載的文件長度 
        downloadedBytes = [self fileSizeForPath:downloadPath]; 
        if (downloadedBytes > 0) { 
            NSMutableURLRequest *mutableURLRequest = [request mutableCopy]; 
            NSString *requestRange = [NSString stringWithFormat:@"bytes=%llu-", downloadedBytes]; 
            [mutableURLRequest setValue:requestRange forHTTPHeaderField:@"Range"]; 
            request = mutableURLRequest; 
        } 
    } 
    //不使用緩存,避免斷點續傳出現問題 
    [[NSURLCache sharedURLCache] removeCachedResponseForRequest:request]; 
    //下載請求 
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
    //下載路徑 
    operation.outputStream = [NSOutputStream outputStreamToFileAtPath:downloadPath append:YES]; 
    //下載進度回調 
    [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { 
        //下載進度 
        float progress = ((float)totalBytesRead + downloadedBytes) / (totalBytesExpectedToRead + downloadedBytes); 
    }]; 
    //成功和失敗回調 
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
             
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
             
    }]; 
    [operation start]; 


緩存

相關文章
相關標籤/搜索