我写了一个下载工具。它与NSURLDownload一起正常工作。 但是当谈到恢复下载时,我遇到了一些问题。 resumeData始终为零! 当我用jDownloader下载相同的文件时,停止下载并再次恢复,jDownloader恢复下载!这个文件和服务器也可以!
代码:
- (void)startDownload {
status = @"loading";
NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
urlDownload = [[NSURLDownload alloc] initWithRequest:theRequest delegate:self];
[urlDownload setDeletesFileUponFailure:NO];
if (!urlDownload) {
[self error:@"Failed starting download request!"];
}
}
试验:
- (IBAction)stopWithResumeOption:(id)sender {
[urlDownload cancel];
NSData *tempData = [urlDownload resumeData];
NSLog(@"%@",tempData);
}
如果我在加载“stopWithResumeOption”时停止下载,我总是没有! 我错过了什么吗?!
编辑:
resumeData返回什么信息?如果它只是已经下载的数据的长度或某些东西,也许我可以自己创建这个resumeData?!有人试过这个吗?
编辑2:
以下是我正在尝试恢复的一个文件的响应标头:
{
"Accept-Ranges" = bytes;
"Cache-Control" = "max-age=0";
Connection = "keep-alive";
"Content-Length" = 43346723;
"Content-Type" = "application/pdf";
Date = "Sun, 13 Mar 2011 13:08:44 GMT";
Etag = 1185n;
Pragma = public;
Server = dbws;
"X-Robots-Tag" = "noindex,nofollow";
}
甚至ETag也是由服务器提供的!
是否有机会这样做:
- (IBAction) resume:(id)sender {
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSString *authHeader = [NSString stringWithFormat:@"bytes=%llu-%llu",bytesReceived, totalBytesToLoad];
[request addValue:authHeader forHTTPHeaderField:@"Range"];
urlDownload = [[NSURLDownload alloc] initWithRequest:request delegate:self];
}
但我不确定如何继续尝试...
答案 0 :(得分:1)
取消强>
取消接收者的下载并删除下载的文件。
考虑通过断开与网络的连接来模拟故障。不要忘记实现委托方法。
修改强>
<强> resumeData 强>
如果无法恢复下载,则返回nil。
<强>讨论强>
只有下载协议以及服务器支持恢复
,才会返回恢复数据
您确定服务器支持恢复吗?
编辑2:
确保urlDownload
方法中的nil
不是stopWithResumeOption:
..
urlDownload
方法中{p> assigned
为startDownload
(如何声明?)
尝试:
urlDownload = [[[NSURLDownload alloc] initWithRequest:theRequest delegate:self] retain];
并记得[urlDownload release]
。{/ p>
答案 1 :(得分:0)
我知道这已经过时了,但希望这能节省一些时间。
截至目前,文档中未提及此内容,但 resumeData属性始终返回nil,除非下载被取消或失败。
似乎很不幸,因为如果您的应用在下载过程中崩溃,很难恢复下载。