Ich bekam Fehlermeldungen, dass meine iOS-App Upload von Bildern auf langsamen Verbindungen fehlgeschlagen ist. Während meine Auszeit wahrscheinlich nicht hoch genug war, gab es ein anderes Problem.NSURLSession, Upload-Aufgabe - Erhalte tatsächliche Bytes übertragen
Ich fand, dass Upload-Fortschritt schnell zu 100% ging, obwohl ich in Charles sehen konnte, dass Bytes noch übertragen wurden. Ich verwende die folgende Methode von NSURLSession:
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request
fromData:(NSData *)bodyData
completionHandler:(void (^)(NSData *data,
NSURLResponse *response,
NSError *error))completionHandler
und Umsetzung der folgenden Delegatmethode Fortschritt Ereignisse zu erhalten:
- (void)URLSession:(NSURLSession *)session
task:(NSURLSessionTask *)task
didSendBodyData:(int64_t)bytesSent
totalBytesSent:(int64_t)totalBytesSent
totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend
Eigentlich verwende ich AFNetworking 2.5.2, die diese Methode verwendet. Meine Theorie ist, dass diese Delegate-Methode über Bytes berichtet, die vom Telefon gesendet werden, und NICHT tatsächlich übertragene Bytes.
Wenn Sie 300kb bei einer sehr niedrigen Verbindung senden, senden Sie sofort 5-6 Pakete und melden einen Fortschritt von 100%, während Sie darauf warten, dass sie empfangen werden.
Ist es möglich, Fortschrittsereignisse über die tatsächliche Anzahl der bestätigten Bytes zu erhalten?
Ich nehme an, "Betrieb" ist ein "AFHTTPRequestOperation". Dies hat den gleichen "Defekt" wie der obige Ansatz mit einer Sitzung, fürchte ich. –
Wenn Sie den Uploadvorgang korrekt durchführen, sollte dies kein Problem verursachen. Ich habe 30 Bilder mit der gleichen Operation hochgeladen und auch den Fortschritt verfolgt, wie in der Antwort erwähnt. Stellen Sie sicher, dass Sie "multipart" verwenden. – Vizllx
Haben Sie versucht, eine Proxy-Anwendung wie Charles zu verwenden, um die Upload-Geschwindigkeit auf z. 30 kpbs? Dies ist der Zeitpunkt, an dem der Fortschritt sich merkwürdig zu verhalten beginnt, wie im obigen Problem beschrieben –