Продолжить прерванную загрузку на iPhone

Я использую NSURLConnection для загрузки больших файлов из Интернета на iPhone. Я использую метод didReceiveData для добавления данных в файл в папке «Документы». Это работает нормально.

Если загрузка прерывается (например, из-за того, что пользователь нажал кнопку «Домой»), я хотел бы иметь возможность продолжить загрузку при следующем запуске пользователем моего приложения, а не с нуля!

Кто-нибудь может мне помочь?


person Community    schedule 10.06.2009    source источник


Ответы (3)


ASIHTTPRequest имеет простую в использовании поддержку для возобновления загрузки:

http://allseeing-i.com/ASIHTTPRequest/How-to-use#resume

Кроме того, узнайте, сколько данных вы уже загрузили, посмотрев на размер существующих данных, и установите заголовок «Диапазон» на вашем NSMutableURLRequest:

[request addValue:@"bytes=x-" forHTTPHeaderField:@"Range"];

..где x - размер уже имеющихся данных в байтах. Это загрузит данные, начиная с байта x. Затем вы можете добавить эти данные в свой файл по мере его получения.

Обратите внимание, что веб-сервер, с которого вы загружаете, должен поддерживать частичную загрузку для ресурса, который вы пытаетесь загрузить — если это так, он отправляет заголовок Accept-Ranges. Как правило, вы не можете возобновить загрузку динамически сгенерированного контента (например, страницы, сгенерированной скриптом на сервере).

person pokeb    schedule 11.06.2009
comment
Похоже, ответ, который я искал. Спасибо большое, покеб. - person ; 11.06.2009

Единственный способ, который я могу придумать, - это разбить загружаемый файл на более мелкие файлы. Вы можете использовать

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

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

person Dan Lorenc    schedule 10.06.2009

Посмотрите на стандарт HTTP, чтобы увидеть, как вы формируете запрос, чтобы начать передачу ресурса с определенного смещения. Я не могу найти код навскидку, извините.

person Kendall Helmstetter Gelner    schedule 11.06.2009