2009-06-10 9 views
1

Ich benutze NSURLConnection, um große Dateien aus dem Internet auf dem iPhone herunterzuladen. Ich verwende die Methode "didReceiveData", um Daten an eine Datei im Ordner "Documents" anzuhängen. Es funktioniert gut.Weiter unterbrochen Download auf iPhone

Wenn der Download unterbrochen wird (zum Beispiel, weil der Benutzer die "Home" -Schaltfläche gedrückt hat), möchte ich in der Lage sein, das nächste Mal, wenn der Benutzer meine Anwendung startet, herunterzuladen, und nicht von Grund auf neu!

Jeder kann mir helfen?

Antwort

7

ASIHTTPRequest hat einfache Unterstützung für die Wiederaufnahme-Downloads zu verwenden:

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

Alternativ finden Sie heraus, wie viele Daten Sie bereits heruntergeladen haben, auf die Größe der vorhandenen Daten durch suchen, und stellen Sie die ‚Range‘ header auf Ihrem NSMutableURLRequest:

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

..wo x die Größe in Bytes der Daten, die Sie bereits haben, ist. Dies wird Daten ab Byte x herunterladen. Sie können diese Daten dann an Ihre Datei anhängen, wenn Sie sie erhalten.

Beachten Sie, dass der Webserver, von dem Sie herunterladen, partielle Downloads für die Ressource unterstützen muss, die Sie herunterladen möchten. Wenn ja, sendet er den Accept-Ranges-Header. Im Allgemeinen können Downloads für dynamisch generierten Inhalt nicht fortgesetzt werden (z. B. eine Seite, die von einem Skript auf dem Server generiert wird).

+0

Es sieht aus wie die Antwort, die ich gesucht habe. Vielen Dank, Pokeb. –

-1

Die einzige Methode, die ich mir vorstellen kann, besteht darin, die Datei, die Sie herunterladen, in kleinere Dateien zu zerlegen. Sie können die

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

Methode zur Bestimmung verwenden, wenn jeder Teil der Datei abgeschlossen ist, und starten Sie den Download auf dem letzten Teil, der nicht heruntergeladen bekommt.

-1

Sehen Sie sich den HTTP-Standard an, um zu sehen, wie Sie eine Anforderung zum Starten einer Übertragung einer Ressource von einem bestimmten Offset erstellen würden. Ich kann keinen Code ohne Probleme finden, sorry.