2012-10-24 17 views
6

Przeszukałem bezskutecznie i mam nadzieję na twoją pomoc w tej sprawie.totalBytesExpectedToRead w setDownloadProgressBlock pozostaje -1 dopóki pobieranie nie zostanie wykonane

Próbowałem pobrać obraz, korzystając z transmisji strumieniowej AFHTTPRequestOperation (ustawiając strumień danych wyjściowych). Pobiera plik, nie ma problemu. Ale pasek postępu nie będzie wyświetlany poprawnie, ponieważ totalBytesExpectedToRead zawsze zwraca -1, a zwraca tylko poprawną wartość po zakończeniu pobierania.

Czy to jest charakter przesyłania strumieniowego? Czy zrobiłem coś złego?

Mój kod poniżej.

Z góry dziękuję!

(void) invokeAsynchronousSTREAMING (NSString *) locationToSave ścieżki: (*) NSString parametry locationToSave (NSDictionary *) paramDict callId (NSString *) callId {

NSMutableURLRequest *request = [[AFServerAPIClient sharedClient] requestWithMethod:@"GET" 
                       path:path 
                     parameters:paramDict]; 

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 

if(locationToSave!=nil) { 
    operation.outputStream = [NSOutputStream outputStreamToFileAtPath:locationToSave append:NO]; 
} 

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 

    //DO SOMETHING 

} 
    failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     //DO SOMETHING 
    } 
]; 

[operation setDownloadProgressBlock:^(NSInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { 

    NSLog(@"invokeAsyncronousSTREAMING - Received %lld of %lld bytes", totalBytesRead, totalBytesExpectedToRead); 

    //DO SOMETHING 
}]; 

[operation start]; 

} // koniec invokeAsyncStreaming

Odpowiedz

9

Postęp pobierania może powrócić -1, jeśli serwer nie ustawi nagłówka HTTP Content-Length w odpowiedzi.

W tym przypadku zalecane jest użycie wskaźnika nieokreślonego postępu.

5

Ponadto, zgodnie this question jeśli gzip stosuje się podczas transferu totalBytesExpectedToRead nadal powrotu -1 nawet jeśli nagłówek zawiera żadnego Content-Length (obu przypadkach jest dość częste). Dzieje się tak dlatego, że zawartość może zostać zdekompresowana dopiero po zakończeniu przesyłania, dlatego jego rozmiar nie będzie znany przed zakończeniem przesyłania.

Powiązane problemy