Ich habe einige Probleme mit der Verwendung von NSURLSession
zum Hochladen von Fotos aus der Asset-Bibliothek auf den Server.NSURLSession und Stream-Upload im Hintergrund
Zuerst unterstützt NSURLSession
Streaming-Upload nicht. Ich habe eine Ausnahme bei dem Versuch, das zu verwenden:
@property (nonatomic, strong) NSURLSession *uploadSession;
...
_uploadSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration
backgroundSessionConfiguration:kUploadBackgroundURLSessionIdentifier] delegate:self delegateQueue:nil];
...
NSURLSessionUploadTask *task = [self.uploadSession uploadTaskWithStreamedRequest:URLRequest];
Dies ist eine Ausnahme:
Terminating app due to uncaught exception 'NSGenericException', reason: 'Upload tasks in background sessions must be from a file'
Das ist wirklich seltsam ist, weil Apples Handbuch keine Informationen enthalten, etwa nur uploadTaskWithRequest:fromFile:
für Hintergrund-Sitzung. Was wäre, wenn ich wirklich große Videodateien aus der Asset-Bibliothek hochladen möchte? Sollte ich es vorher in meinem tmp-Verzeichnis speichern?
Sieht aus wie der einzige Grund ist, uploadTaskWithRequest:fromFile:
trotzdem zu verwenden, nicht wahr? Aber dann habe ich eine Frage, wie der Server erfährt, welcher Teil der Datei gerade hochgeladen wird, wenn der Upload-Prozess unterbrochen wurde und begonnen hat, den nächsten Teil im Hintergrund hochzuladen?
Sollte ich etwas dafür verwalten? Zuvor habe ich Content-Range für die URL-Anfrage verwendet, wenn ich den Teil der Datei, der zuvor gestartet wurde, weiter hochladen möchte. Jetzt kann ich das nicht tun - ich muss eine URL-Anfrage erstellen, bevor ich eine Upload-Aufgabe erstelle und wie NSURLSession
so etwas automatisch für mich machen muss?
Macht jemand so etwas schon? Dank
Als ich die Dokumente las, war es ziemlich klar, dass Sie eine Datei für den Hintergrund liefern mussten. Nicht sicher von Ihrer Frage - wenn die Datei nur teilweise hochgeladen wird, und Ihr Dienst Ihnen sagt, wie viel davon empfangen wurde, dann können Sie Ihre Datei trimmen und den nicht gesendeten Teil erneut senden, nein. Ich habe keine Erfahrung damit, aber würde funktionieren. –
Ja, alles sieht praktikabel aus, aber es gibt ein Problem, dass ich, wenn ich ein riesiges Video aus der Asset-Bibliothek hochladen möchte, es kopieren muss (wenn ich genug Platz habe), um dann zu kopieren Um zu überprüfen, was bereits hochgeladen wurde, trimmen Sie die Datei und starten Sie eine neue Anfrage. Aber die Docs von Apple sagen, dass ich für jede Datei eine Aufgabe erstellen muss. – gN0Me
Ich habe keine Erfahrung mit der Asset-Bibliothek - in welchem Framework oder welcher Klasse würden Sie das Video abrufen? –