我写了一个下载工具。它在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];
}但我不知道该怎么做.
发布于 2011-03-12 13:44:35
文档说:
取消 取消接收方的下载并删除下载的文件。
请考虑通过断开网络来模拟故障。不要忘记实现委托方法。
编辑:
文档还说:
resumeData 如果无法恢复下载,则返回零。 讨论 只有当下载协议和服务器支持恢复时,才会返回恢复数据。
您确定服务器支持恢复吗?
编辑2:
确保urlDownload在您的stopWithResumeOption:方法中不是nil。
urlDownload是startDownload方法中的assigned (它是如何声明的?)
尝试:
urlDownload = [[[NSURLDownload alloc] initWithRequest:theRequest delegate:self] retain];并在适当的情况下记住[urlDownload release]。
发布于 2012-07-21 13:07:02
我知道这是旧的,但希望这能节省一些时间。
到目前为止,文档中没有提到这一点,但是resumeData属性总是返回零,除非下载被取消或失败。
这似乎很不幸,因为这使得如果应用程序在下载过程中崩溃,很难恢复下载。
https://stackoverflow.com/questions/5282447
复制相似问题