利用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];


}


备注:返回的是处理过的文件的本地路径

赞一个 (2)
分享到: +More

评论 沙了个发

换个身份

取消评论