URLSession委托函数totalBytesExpectedToWrite始终返回-1

时间:2018-10-08 08:30:24

标签: ios objective-c iphone nsurlsession

我创建了用于下载文件的URLSession,文件下载正确,没问题。

我想显示剩余字节的百分比计数,但是要使用委托函数:

-(void) URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite

及其参数totalBytesExpectedToWrite始终返回-1。

几天前一切正常,代码没有变化,但突然停止发送期望的字节。

我的请求代码如下:

NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];

NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];

NSMutableURLRequest*request = [NSMutableURLRequest requestWithURL:fileUrl];

NSDictionary*param = [[NSDictionary alloc]initWithObjectsAndKeys:@"",@"Accept-Encoding", nil];
[request setAllHTTPHeaderFields:param];

NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request];
[downloadTask resume];

我缺少的api是否有变化?还是其他方式?

1 个答案:

答案 0 :(得分:1)

-1NSURLSessionTransferSizeUnknown,这意味着http服务器未提供“ Content-Length”标头(并且使用“ Transfer-Encoding:分块”发送数据)。

您可能无能为力。如果您的情况也可以尝试使用https://stackoverflow.com/a/12599242/1187415中的解决方法,则可以尝试

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:anURL];
[request addValue:@"" forHTTPHeaderField:@"Accept-Encoding"];