这适用于 iOS:
我正在尝试从先前中断的连接恢复文件下载。为此,我只需使用 HTTP 标头的范围字段来设置下载请求的起点,如下所示:
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString: url]];
// Find out if file already exists.
if([[NSFileManager defaultManager] fileExistsAtPath:filename])
{
NSError *error;
unsigned long long currentSize =[[[NSFileManager defaultManager] attributesOfItemAtPath:filename error:&error] fileSize];
NSLog(@"File exists, size:%llu",currentSize);
// If the file was not completly downloaded -> resume download
[urlRequest addValue:[NSString stringWithFormat:@"bytes=%llu-",currentSize] forHTTPHeaderField:@"Range"];
//[urlRequest setValue:[NSString stringWithFormat:@"%llu-",currentSize] forHTTPHeaderField:@"range"];
}
正如您在上面的 src 中看到的,我也尝试使用 setValue。在这两种情况下,似乎都添加了“范围”字段但不起作用。该文件始终从字节偏移量 0 发送。当我执行 NSLog(@"%@", [urlRequest allHTTPHeaderFields]) 时,我设置了范围值,但它似乎仍然不起作用:
做一个 NSLog(@"%@", [urlRequest allHTTPHeaderFields]) 显示: {Range = "bytes=13207107-"; } 或者,在注释掉 setValue 代码的情况下:{Range = "13207107-";}。
我想也许 HTTP 服务器不支持范围,但 IT 人员向我保证它支持...
有人在上面的代码中看到任何问题吗?是否有一种简单的方法可以测试 Web 服务器是否支持范围字段?
谢谢!