2009-06-10 15 views
1

J'utilise NSURLConnection pour télécharger des fichiers volumineux sur le Web sur iPhone. J'utilise la méthode "didReceiveData" pour ajouter des données à un fichier dans le dossier Documents. Ça fonctionne bien. Si le téléchargement est interrompu (par exemple, parce que l'utilisateur a appuyé sur le bouton "home"), je voudrais pouvoir continuer à télécharger la prochaine fois que l'utilisateur lancera mon application, et pas à partir de zéro!Continuer un téléchargement interrompu sur l'iPhone

Quelqu'un peut-il m'aider?

Répondre

7

ASIHTTPRequest facile a utiliser le support pour la reprise des téléchargements:

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

Vous pouvez également savoir la quantité de données que vous avez téléchargé déjà en regardant la taille des données existantes et définir la « Range » en-tête sur votre NSMutableURLRequest:

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

..where x est la taille en octets des données que vous avez déjà. Cela va télécharger les données à partir de byte x. Vous pouvez ensuite ajouter ces données à votre fichier lorsque vous le recevez.

Notez que le serveur Web à partir duquel vous téléchargez doit supporter des téléchargements partiels pour la ressource que vous essayez de télécharger - il envoie l'en-tête Accept-Ranges si c'est le cas. Vous ne pouvez généralement pas reprendre les téléchargements pour du contenu généré dynamiquement (par exemple, une page générée par un script sur le serveur).

+0

Il ressemble à la réponse que je cherchais. Merci beaucoup, pokeb. –

-1

La seule méthode que je peux penser est de casser le fichier que vous téléchargez en plus petits fichiers. Vous pouvez utiliser le

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
méthode

pour déterminer quand chaque partie du fichier est terminée, et redémarrez le téléchargement à la dernière partie qui n'a pas été téléchargée.

-1

Regardez le standard HTTP pour voir comment vous feriez une demande pour démarrer un transfert d'une ressource à partir d'un décalage spécifique. Je ne trouve aucun code, désolé.

Questions connexes