需要帮助下载使用AFnetworking异步获取进度的文件

时间:2015-03-25 15:44:20

标签: ios objective-c afnetworking-2

我正在尝试使用AFNetworking 2.0创建iPhone文件下载程序(https://github.com/AFNetworking/AFNetworking

我遇到了这段代码的随机问题:

-(void)downloadFile:(NSString *)UrlAddress
{
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:UrlAddress]];
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

    NSString *documentsDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    NSString *mp3Name = @"lol.mp3";
    NSString *path = [NSString stringWithFormat:mp3Name,documentsDir];

    operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"Successfully downloaded file to %@", path);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];
    [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {

        NSLog(@"Download = %f", (float)totalBytesRead / totalBytesExpectedToRead);

    }];
    [operation start];
}

当我调用此函数时,我随机得到这个:

Successfully downloaded file to ... - >它的工作原理

Error Domain=NSURLErrorDomain Code=-1017 "cannot parse response" - >所以下载是成功的,但程序告诉我们存在问题

错误域= NSPOSIXErrorDomain代码= 13“操作无法完成。权限被拒绝” - >所以没有下载,大部分时间都会发生这种情况。

我在网上找不到与这些问题相关的任何内容,这实际上很烦人,因为它是随机发生的。

感谢您的帮助,祝您度过愉快的一天。

1 个答案:

答案 0 :(得分:1)

我的第一印象是您正在错误地检索文档目录。

NSString *documentsDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSString *mp3Name = @"lol.mp3";
NSString *path = [NSString stringWithFormat:mp3Name,documentsDir];

如果查看此代码,路径将为:lol.mp3 由于这不是有效路径,因此下载失败。

应该采取的方式是:

NSString *documentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *mp3Name = @"lol.mp3";
NSString *path = [documentsDir stringByAppendingPathComponent:mp3Name];