NSURLDСкачать резюмеДанные ноль - PullRequest
1 голос
/ 12 марта 2011

Я написал инструмент для скачивания.Это нормально работает с NSURLDownload.Но когда дело доходит до возобновления загрузки, у меня возникают некоторые проблемы.РезюмеДанных всегда ноль!Когда я загружаю те же файлы с помощью jDownloader, останавливаю загрузку и возобновляю снова, jDownloader возобновляет загрузку!Так что это возможно с этими файлами и сервером!

код:

- (void)startDownload {
    status = @"loading";
    NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];

    urlDownload = [[NSURLDownload alloc] initWithRequest:theRequest delegate:self];
    [urlDownload setDeletesFileUponFailure:NO];

    if (!urlDownload) {
        [self error:@"Failed starting download request!"];
    }
}

test:

- (IBAction)stopWithResumeOption:(id)sender {
    [urlDownload cancel];
    NSData *tempData = [urlDownload resumeData];

    NSLog(@"%@",tempData);
}

Если я остановлю загрузку во время загрузки с помощью "stopWithResumeOption"Я всегда получаю ноль!Я что-то пропустил?!

Редактировать:

Какую информацию вообще возвращает resumeData?Если это только длина уже загруженных данных или что-то в этом роде, может быть, я смогу создать эти данные резюме самостоятельно ?!Кто-нибудь пробовал это раньше?

Редактировать 2:

Вот заголовок ответа одного файла, который я пытаюсь возобновить:

{
    "Accept-Ranges" = bytes;
    "Cache-Control" = "max-age=0";
    Connection = "keep-alive";
    "Content-Length" = 43346723;
    "Content-Type" = "application/pdf";
    Date = "Sun, 13 Mar 2011 13:08:44 GMT";
    Etag = 1185n;
    Pragma = public;
    Server = dbws;
    "X-Robots-Tag" = "noindex,nofollow";
}

Даже ETag предоставляетсясервер!

Есть ли шанс сделать это следующим образом:

- (IBAction) resume:(id)sender {
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
    NSString *authHeader = [NSString stringWithFormat:@"bytes=%llu-%llu",bytesReceived, totalBytesToLoad]; 
    [request addValue:authHeader forHTTPHeaderField:@"Range"];  

    urlDownload = [[NSURLDownload alloc] initWithRequest:request delegate:self];
}

Но я не уверен, как продолжить эту попытку ...

Ответы [ 2 ]

1 голос
/ 12 марта 2011

Документация гласит:

Отмена

Отменяет загрузку получателя и удаляет загруженный файл.

Попробуйте смоделировать ошибку, отключившись от сети. Не забудьте реализовать методы делегата.

EDIT:

Документация также гласит:

resumeData

Возвращает ноль, если загрузка не может быть возобновлена.

Обсуждение

Данные возобновления будут возвращены, только если протокол загрузки, а также сервер поддерживают возобновление

Вы уверены, что сервер поддерживает возобновление?

РЕДАКТИРОВАТЬ 2:

Убедитесь, что urlDownload не nil в вашем stopWithResumeOption: методе.

urlDownload - это assigned в вашем startDownload методе (как он объявлен?)

Попробуйте:

urlDownload = [[[NSURLDownload alloc] initWithRequest:theRequest delegate:self] retain];

и не забудьте [urlDownload release], где это уместно.

0 голосов
/ 21 июля 2012

Я знаю, что это старый, но, надеюсь, это сэкономит кому-то время.

На данный момент это не упомянуто в документации, но свойство resumeData всегда возвращает nil, если загрузка не отмененаили не удается .

Кажется прискорбным, поскольку это затрудняет возобновление загрузки в случае сбоя приложения в середине загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...