在Objective-C中暂停/恢复下载

Fre*_*eer 13 iphone objective-c download http-headers

好的.希望这将是我关于我在Objective-C中编写的下载管理器的最后一篇文章.除了暂停/恢复功能外,一切似乎都运行良好.我的问题是,当下载尝试从停止的地方继续下载时,它会将收到的数据附加到文件中,但它似乎仍在尝试下载整个文件.这会导致文件大于原始文件.这是我用于下载文件的代码.难道我做错了什么?

-(void)start:(unsigned int)fromByte {
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:self.url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:DEFAULT_TIMEOUT];

    // Define the bytes we wish to download.
    NSString *range = [NSString stringWithFormat:@"bytes=%i-", fromByte];
    [request setValue:range forHTTPHeaderField:@"Range"];

    // Data should immediately start downloading after the connection is created.
    self.urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:TRUE];

    if (!self.urlConnection) {
        #warning Handle error.
    }
}
Run Code Online (Sandbox Code Playgroud)

Ano*_*mie 5

我看到你在请求中指定了Range标头.要检查的第一件事是服务器是否实际上遵守Range请求,方法是检查响应对象(应该是a NSHTTPURLResponse)中的标头以connection:didReceiveResponse:获取正确的Content-Range.


Fre*_*eer 1

我终于明白了这一点。事实证明,我的方法是从文件的属性中'getFilesizeInBytes'获取对象,但我直接将其转换为. 这导致这个数字比应有的数字大约增加了20倍。我能够通过使用来解决这个问题。一旦这个问题被修复,服务器就能够给我以正确字节开始的文件的其余部分。看来在我的问题之前不是服务器不满足我的请求,而是由于我请求的数据远远超出了文件的最后一个字节,所以它无法满足我的请求。NSFileSizeint[@"" intValue]