setDownloadProgressBlock中的totalBytesExpectedToRead保持为-1,直到下载完成

时间:2012-10-24 04:12:14

标签: xcode download afnetworking

我一直在谷歌上搜索无效,并希望得到你的帮助。

我尝试使用AFHTTPRequestOperation流式传输下载图像(通过设置输出流)。 它下载文件,没问题。 但进度条不会显示正确,因为totalBytesExpectedToRead总是返回-1,并且只在下载完成时返回正确的值。

这是流媒体的本质吗? 或者我做错了什么?

我的代码如下。

提前致谢!

(void)invokeAsynchronousSTREAMING:(NSString *)path locationToSave:(NSString *)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];

} //结束invokeAsyncStreaming

2 个答案:

答案 0 :(得分:9)

如果服务器未在响应中设置-1 HTTP标头,则下载进度可能会返回Content-Length

在这种情况下,建议您改用不确定的进度指示器。

答案 1 :(得分:5)

此外,根据this question,如果在转移过程中使用gzip压缩,totalBytesExpectedToRead仍会返回-1,即使标头包含Content-Length(两种情况)非常频繁)。这是因为内容只能在传输结束时解压缩,因此在传输完成之前不会知道其大小。