ファイルをダウンロードするときに、ダウンロードを再開できるようにしたいと思います。例えば:
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リクエストが生成されます。
範囲:bytes = 1000-
最初の206の応答は、次のようなヘッダーと値(からダンプされたallHeaderFields
)を持つ、開始を要求したチャンクを提供することを期待します。
"Content-Range"="バイト1000-340197/340198";
しかし、時々それは先にジャンプして、代わりに次のようなものを返します:
"Content-Range"="バイト32000-340197/340198";
1000〜32000のバイトが必要で、それが私に与えられなかったので、これは本当に悪いことです。
サーバーにカールすると、要求したセクションが返されるため、サーバーエラーが発生しないことはわかっています。また、wiresharkを使用すると、サーバーにパケットが送信されません。したがって、これはiOS側の問題であり、おそらくNSURLCache