NSURLSessionDownloadTask中的totalBytesExpectedToWrite为-1

Ros*_*nko 7 ios nsurlsession

我遇到了一个奇怪的问题.我使用NSURLSession和从Internet加载文件NSURLSessionDownloadTask.这是代码

NSURLSessionConfiguration *sessionConfiguration =
[NSURLSessionConfiguration backgroundSessionConfiguration:kSessionId];
self.session = [NSURLSession sessionWithConfiguration:sessionConfiguration
                                             delegate:self
                                        delegateQueue:[NSOperationQueue new]];
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLSessionDownloadTask *downloadTask = [self.session downloadTaskWithRequest:request];
[downloadTask resume];
Run Code Online (Sandbox Code Playgroud)

我的班级被宣布为NSURLSessionDownloadDelegate,我得到了很好的回调.但是当系统调用委托方法时

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
    NSLog(@"totalBytesExpectedToWrite: %lld", totalBytesExpectedToWrite);
    NSLog(@"%lld", totalBytesWritten);
}
Run Code Online (Sandbox Code Playgroud)

totalBytesExpectedToWrite总是相等-1,我没有能力向用户显示进度,因为我不知道下载文件的大小.

你能告诉我哪里弄错了吗?

Mar*_*n R 11

-1NSURLSessionTransferSizeUnknown,这意味着http服务器没有提供"Content-Length"标头(并且使用"Transfer-Encoding:chunked"发送数据).

您可以做的事情可能不多.您可以尝试/sf/answers/881946971/的解决方法也适用于您的情况:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:anURL];
[request addValue:@"" forHTTPHeaderField:@"Accept-Encoding"];
Run Code Online (Sandbox Code Playgroud)