利用AFN 实现文件异步下载的封装
最近在写公司IM项目的时候,安卓端的录音格式amr格式,安卓的小哥说不好处理转码的问题,于是我就帮忙下iOS端对安卓发送的语音进行一次转码,说下思路,使用AFN异步下载安卓的录音文件,存在本地沙盒中,然后取出录音文件转换成.mp3或者wav格式,供iOS端播放语音,由于我们限制了录音的时长为60秒,所以录音文件不会很大,转换和下载都比较快,下面说下对AFN的异步下载的简单封装:
新建一个DownFile的类,继承NSObject
在DownFile.h文件声明一个下面的方法:
#import <Foundation/Foundation.h> @interface DownFile : NSObject /** * 文件下载 * * @param url 要下载的文件url地址 * @param success 下载成功返回 文件本地路径 */ + (void)down:(NSURL *)url success:(void(^)(NSString *filePath))success; @end
在DownFile.m文件实现其方法
#import "DownFile.h" #import "AFNetworking.h" @implementation DownFile + (void)down:(NSURL *)url success:(void(^)(NSString *filePath))success{ NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; AFURLSessionManager *manger = [[AFURLSessionManager alloc]initWithSessionConfiguration:configuration]; NSURLRequest *urlrequest = [[NSURLRequest alloc]initWithURL:url]; NSURLSessionDownloadTask *downloadTask = [manger downloadTaskWithRequest:urlrequest progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]]; } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { NSLog(@"来之安卓的语音消息下载完成: %@", filePath); NSString *amrUrl = [NSString stringWithFormat:@"%@",filePath]; amrUrl = [amrUrl substringFromIndex:7]; success(amrUrl); }]; [downloadTask resume]; }
备注:返回的是处理过的文件的本地路径