下载文件时,我希望能够恢复下载。例如:
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”=“bytes 1000-340197 / 340198”;
但有时它会向前跳并返回类似的东西:
“Content-Range”=“bytes 32000-340197 / 340198”;
这真的很糟糕,因为我需要1000-32000这些字节,而且它没有给我。
我知道没有服务器错误,因为当我卷曲到服务器时它会返回我要求的部分。此外,当我使用wireshark时,我看不到任何数据包进入服务器。所以这是iOS方面的问题,可能是NSURLCache
答案 0 :(得分:1)
这似乎是NSURLCache
中的错误。当我发现问题已经发生时,我会执行以下操作并再试一次。
[[NSURLCache sharedURLCache] removeCachedResponseForRequest:self.request];
一旦我这样做了,问题就不会再发生了。它似乎治愈了缓存。我在iOS5.0上看到了这个,因为我再也无法重现,我不知道它是否发生在较新的操作系统上。