这适用于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服务器是否支持范围字段?
谢谢!
答案 0 :(得分:1)
我会独立于您的应用测试服务器。请求的格式似乎是正确的。最简单的方法是使用OSX附带的curl
:
curl -sv -H 'Range: bytes=100-500' http://www.google.com/intl/en_com/images/srpr/logo3w.png > /dev/null
如果在响应头和相应的Content-Range
标题(本例中为401)中没有看到Content-Length
,则表示服务器出现故障。