2016-04-06 8 views
4

Ich möchte die PDF-Datei herunterladen. Wenn ich eine kleine PDF-Datei herunterlade, bekomme ich einen Pluswert, aber wenn ich eine große Datei lade, bekomme ich einen Minuswert mit afnetworking.Negativer Wert in Progress Block beim Dateidownload

hier ist mein Code:

- (IBAction)download:(id)sender { 


    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@""]]; 
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
    NSString *pdfName = @"The_PDF_Name_I_Want.pdf"; 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:pdfName]; 
    operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO]; 
    [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { 

     NSLog(@"Download = %f", (float)totalBytesRead/totalBytesExpectedToRead); 
       self.progressView3.progress = (float)totalBytesRead/totalBytesExpectedToRead; 

    }]; 
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSLog(@"Successfully downloaded file to %@", path); 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"Error: %@", error); 
    }]; 

    [operation start]; 
} 

meine Ausgabe sehen

2016-04-06 15:04:53.842 pdf[8149:60b] Download = -811521.000000 
2016-04-06 15:04:53.849 pdf[8149:60b] Download = -817179.000000 
2016-04-06 15:04:53.860 pdf[8149:60b] Download = -819123.000000 
2016-04-06 15:04:53.872 pdf[8149:60b] Download = -823469.000000 
2016-04-06 15:04:53.879 pdf[8149:60b] Download = -826393.000000 
2016-04-06 15:04:53.921 pdf[8149:60b] Download = -827820.000000 
2016-04-06 15:04:53.932 pdf[8149:60b] Download = -830744.000000 
2016-04-06 15:04:53.939 pdf[8149:60b] Download = -833662.000000 

bitte mein Problem lösen ...

+0

Was sind die Werte ('totalBytesRead' und' totalBytesExpectedToRead')? Man könnte negativ sein, welche? Oder ist ein Besetzungsproblem. – Larme

+0

hier ist dieser negative Wert (float) totalBytesRead/totalBytesExpectedToRead – iOS

+0

Ich weiß, ich verstehe die Protokolle, die Sie setzen, aber unter Berücksichtigung jeder Werte, ist einer von ihnen negativ? Wie schweben? So lange lang? – Larme

Antwort

1

Ihr Problem ist, Inhaltslänge pdf-Datei im Server .totalBytesExpectedToRead ist -1, wenn die Content-Length HTTP-Header nicht

sollte diesen Header an den Server hinzufügen, wird entweder durch die server.you hochladen, oder handle -1, indem ein UIActivityIndicator anstelle einer UIProgressView angezeigt wird.

1

Wie Ihre Protokolle zeigen, die totalBytesExpectedToRead -1. Dies geschieht, wenn die Content-Length nicht in den Antwortheadern bereitgestellt wird.

Sie können entweder die serverseitigen Kerle bitten, die entsprechende Inhaltslänge zurückzugeben, oder in der iOS-App, indem Sie eine einfache Aktivitätsanzeige anstelle einer Fortschrittsanzeige anzeigen.