Вопросы

подсчет общего прогресса загрузки нескольких файлов с AFNetworking

Я хочу загрузить несколько файлов, а затем показать пользователю общий прогресс.

но проблема в том, что я не знаю, как рассчитать общий прогресс.

вот что я делаю: сначала я добираюсь до totalBytes, ожидаемых от всех файлов:

for (NSURL candidateUrl in UrlsList)
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:candidateURL];
                        //setting HTTPMethod of request from GET to HEAD to download header files of requests, so we can get file size before downloaing file
                        [request setHTTPMethod:@"HEAD"];

                        getTotalImagesBytesOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
                        [getTotalImagesBytesOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
                         {
                             //setting totalImagesBytesExpectedToRead of all images. we use it to know how many bytes we should download for all the images
                              totalImagesBytesExpectedToRead += [operation.response expectedContentLength];


                         } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                             NSLog(@"Error: %@", error);
                         }];

                        [operationQueue addOperation:getTotalImagesBytesOperation];
}

после оценки общего размера файлов:

        //downloading images
    for (NSURL *imageUrl in imagesURLList) {
        NSURLRequest *request = [NSURLRequest requestWithURL:imageUrl];
        AFImageRequestOperation *downloadImageOperation = [AFImageRequestOperation imageRequestOperationWithRequest:request
                                                                                  imageProcessingBlock:nil

                                                                                               success: ^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {                                                                                      
NSLog(@"success")
}
failure: ^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
                                                                                                       NSLog(@"%@", [error localizedDescription]);
                                                                                                   }];

        [operationQueue addOperation:downloadImageOperation];

        [downloadImageOperation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead)
        {

          **HOW TO CALCULATE TOTAL PROGRESS**
}

Я не знаю, как рассчитать общий размер !! значения, которые у нас есть: totalBytesOfAllTheFiles, totalBytesRead и totalBytesExpectedToRead для текущего файла, который дает вам вышеуказанный метод, indexOfCurrentFile и countOfFiles.

Читать:
Как загрузить исходный код для определенного коммита в Bitbucket?

будьте осторожны, setDownloadProgressBlock вызывается сотнями раз.

у кого-нибудь есть идеи? (извините за плохое форматирование кода!)

Не могли бы вы просто разделить totalBytesRead на totalBytesExpectedToRead?   —  person Hashem Aboonajmi    schedule 07.09.2014

@ evan.stoddard totalBytesRead/totalBytesExpectedToRead дает мне процент завершения текущего файла. не все файлы!   —  person Hashem Aboonajmi    schedule 07.09.2014

Первое соображение: вам действительно нужно быть настолько точным, чтобы использовать общее количество байтов для расчета прогресса? Я использовал общее количество загруженных файлов / общее количество файлов, которые нужно загрузить, чтобы рассчитать прогресс приложения. Это намного проще.   —  person Hashem Aboonajmi    schedule 07.09.2014

Подумайте о том, когда ваши первые пять файлов имеют общий размер 1 МБ, а последние пять файлов — 100 МБ. этот расчет не годится.   —  person Hashem Aboonajmi    schedule 07.09.2014

В этом случае единственным способом может быть считывание информации об общем размере из файла данных где-нибудь в сети до начала загрузки. Если это невозможно, вам придется переосмыслить дизайн своего приложения. Вы не можете узнать размер всех файлов до их загрузки.   —  person Hashem Aboonajmi    schedule 08.09.2014

Похожие записи

Запрос Firebase ничего не возвращает

admin

AZURE DATA FACTORY — Системе не удалось найти введенную опцию среды.

admin

Построение таймсерий Юлия

admin

Запуск удаленного ядра через ноутбук jupyter

admin

Небольшие значения на аллювиальном графике, когда уменьшение размера шрифта не является решением

admin

Различные регионы для Firestore DB и Firebase Cloud Functions

admin