При загрузке файла я хочу иметь возможность возобновить загрузку. Например:NSURLResponse возвращает Content-Range, игнорируя диапазон, который я задал для
NSFileManager *fm = [NSFileManager defaultManager];
NSString *downloadTempPath = [_tempPath path];
if ([fm fileExistsAtPath:downloadTempPath]) {
// We have a partial download. Get the rest of the file starting at byteCount
NSDictionary *dAttrib = [fm attributesOfItemAtPath:downloadTempPath error:nil];
NSUInteger byteCount = [dAttrib fileSize];
NSLog(@"Preparing to resume download: %@", downloadTempPath);
NSString *requestRange = [NSString stringWithFormat:@"bytes=%d-", byteCount];
[self.request setValue:requestRange forHTTPHeaderField:@"Range"];
}
Это произведет запрос GET с заголовком, как это:
Диапазон: число байт = 1000-
Я бы ожидать, что первые 206 ответа дать мне кусок, где я попросил его начать, имея заголовок и значение, подобное этому (сбрасывается с allHeaderFields
):
«Content-Range» = «байты 1000-340197/340198»;
Но иногда он прыгает вперед и возвращает что-то вроде этого, вместо:
"Content-Range" = "байт 32000-340197/340198";
Это действительно плохо, потому что мне нужны эти байты с 1000-32000, и он не дал их мне.
Я знаю, что ошибки сервера нет, потому что когда я зацикливаюсь на сервере, он возвращает раздел, который я просил. Кроме того, когда я использую wirehark, я не вижу никакого пакета, идущего на сервер. Так что это проблема на стороне iOS, возможно, с NSURLCache
Я столкнулся с аналогичной проблемой на iOS 8.1.2. Запрос не содержал заголовков «Range» или «If-Range», но ответ возвращал частичный контент заголовку Content-Range. Я исправил это, полностью исключив использование кеша с политикой кэша NSURLRequestReloadIgnoringLocalCacheData'. – Yan