从服务器下载大数据

时间:2015-03-03 10:36:22

标签: ios objective-c asihttprequest

我正在从服务器下载pdf文件(250 mb)。当我保存到它文档目录。它被破坏只有1 kb的大小。

我正在使用此代码:

if (!networkQueue) {
    networkQueue = [[ASINetworkQueue alloc] init];
}
UIProgressView *myProgressIndicatorImg;;
[networkQueue setDelegate:self];
[networkQueue setDownloadProgressDelegate:myProgressIndicatorImg];
[networkQueue setShowAccurateProgress:YES];
[networkQueue bytesDownloadedSoFar];
[networkQueue setRequestDidFinishSelector:@selector(requestFinished:)];
[networkQueue setRequestDidReceiveResponseHeadersSelector :@selector(requestRecieved:)];


ASIHTTPRequest *request;

request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"example.com"]];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"E_governance"];
NSLog(@"E_governance media path is %@",dataPath);
if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
    [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:nil]; //Create folder



NSString *savePath=[NSString stringWithFormat:@"%@/%@",dataPath,@"Filename1.mp3"];
[request setDownloadDestinationPath:savePath];
[request setUserInfo:[NSDictionary dictionaryWithObject:@"request1" forKey:@"name"]];

[networkQueue addOperation:request];
[networkQueue go];

任何人都可以让我知道我在哪里做错了吗?

提前致谢。

1 个答案:

答案 0 :(得分:3)

ASIHTTP是一个非常旧框架,可以追溯到iOS 4.0。当它是最新的时,它很棒 - 我在许多项目中都使用它。然而,即使有编译器的所有标志,它仍然只是在竞争对手后面 - AFNetworking。如果您的项目不是很大,请考虑切换 - 它有一个完成处理程序,比ASIHTTP的程序概念更现代。

如果您无法切换 - 很难确定您的代码到底在哪里,但networkQueue看起来非常可疑,因为您既没有将其分配给_networkQueue也不是self.networkQueue表示它是一个实例变量,可能不是真的。确保你没有在方法中初始化队列,这在方法完成后最终会消失(考虑到事实,ASIHTTP是异步的,有意义的是,只有1kb会被下载到该方法中一段的时间)。

此外 - ASIHTTP是信号槽模式驱动的(观察者) - 有队列的委托方法可以实现以查看正在进行的操作(requestDidStartSelectorrequestDidFinishSelector)。