AFNetworking 3.0下载* .m4r文件

问题描述:

我有一个旧的项目,并尝试从AFNetworking 2. *更新到AFNetworking 3.0。一切似乎工作正常,除了下载m4r文件。旧代码中使用这样的事情:AFNetworking 3.0下载* .m4r文件

NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:URLString]]; 
[request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; 
AFHTTPRequestOperation* requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
requestOperation.responseSerializer = [AFJSONResponseSerializer serializer]; 
requestOperation.outputStream = [NSOutputStream outputStreamToFileAtPath:outPath append:NO]; 
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation* operation, id responseObject) { 
      // 
     } failure:^(AFHTTPRequestOperation* operation, NSError* error) { 
    // 
}]; 
[requestOperation setDownloadProgressBlock:downloadProgressBlock]; 
[requestOperation start]; 

我不知道,如何与输出流逻辑移动逻辑AFNetwroking 3.0,所以现在我离开了它,并改写了旧代码:

AFHTTPSessionManager* manager = [AFHTTPSessionManager manager]; 
manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
[manager.responseSerializer setAcceptableContentTypes: [manager.responseSerializer.acceptableContentTypes setByAddingObjectsFromArray: @[@"video/mp4", @"audio/mpeg"]]]; 
manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
[manager.requestSerializer setValue: @"gzip" forHTTPHeaderField: @"Accept-Encoding"]; 
[manager GET: URLString parameters: nil progress: downloadProgressBlock success:^(NSURLSessionTask* task, id responseObject) { 
     // 
    }   failure:^(NSURLSessionTask* operation, NSError* error) { 
     // 
}]; 

与设置acceptableContentTypes的行被添加,因为没有它,我接收到错误与描述:

“请求失败:不可接受的内容类型:视频/ MP4”

现在,解决这个错误之后,我越来越

“无法将数据转换成使用检测到编码的字符串。该 数据可能已损坏“

我在做什么错

我已经成功地与下载任务修复我的代码如下所示:?

NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:URLString]]; 
[request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; 

AFHTTPSessionManager* manager = [AFHTTPSessionManager manager]; 
NSURLSessionDownloadTask* downloadTask = [manager downloadTaskWithRequest: request progress: downloadProgressBlock destination:^NSURL*(NSURL* targetPath, NSURLResponse* response) { 
    return [[NSURL alloc] initFileURLWithPath: outPath]; 
}              completionHandler:^(NSURLResponse* response, NSURL* filePath, NSError* error) { 
    completion(error == nil, error); 
}]; 
[downloadTask resume];