2015-05-29 6 views
5

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?

Antwort

1

Ja, das ist möglich!

[operation setUploadProgressBlock:^(NSInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { 
    float prog = (totalBytesWritten/(totalBytesExpectedToWrite * 1.0f) * 100); 
    [self.progBar setProgress:prog]; 
    NSLog(@"%f%% Uploaded", (totalBytesWritten/(totalBytesExpectedToWrite * 1.0f) * 100)); 

    }]; 
+0

Ich nehme an, "Betrieb" ist ein "AFHTTPRequestOperation". Dies hat den gleichen "Defekt" wie der obige Ansatz mit einer Sitzung, fürchte ich. –

+0

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

+0

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 –

Verwandte Themen