我一直在谷歌上搜索无效,并希望得到你的帮助。
我尝试使用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
答案 0 :(得分:9)
如果服务器未在响应中设置-1
HTTP标头,则下载进度可能会返回Content-Length
。
在这种情况下,建议您改用不确定的进度指示器。
答案 1 :(得分:5)
此外,根据this question,如果在转移过程中使用gzip压缩,totalBytesExpectedToRead
仍会返回-1
,即使标头包含Content-Length
(两种情况)非常频繁)。这是因为内容只能在传输结束时解压缩,因此在传输完成之前不会知道其大小。