Функция делегата URLSession totalBytesExpectedToWrite всегда возвращает -1 - PullRequest
0 голосов
/ 08 октября 2018

Я создал 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 голосов
/ 08 октября 2018

-1 равно NSURLSessionTransferSizeUnknown, что означает, что http-сервер не предоставил заголовок «Content-Length» (и данные отправляются с использованием «Transfer-Encoding: chunked»).

ТамВероятно, не так много, что вы можете сделать.Вы можете попробовать, если обходной путь от https://stackoverflow.com/a/12599242/1187415 работает и в вашем случае:

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