AFNetworking下载网络相关的附件(音视频)等到本地app包中做离线来提高用户体验
2016-08-09 21:00
746 查看
支持原创:http://blog.csdn.net/lgm252008/article/details/40860077
使用场景:
有时我们做的app在请求网络相关的附件资源时有图片的也有音视频的,请求图片我们常用的第三方库一般是
SDWebImage就足够了,但SDWebImage不支持对像音频、视频及压缩zip等附件的下载支持,这时我们可以利用
AFNetworking的AFHTTPRequestOperation类来完成下载并保存到指定的app的Caches目录下,底层对这块的封装
代码如下:
.h头文件接口
[objc]
view plain
copy
/**
* 下载文件
*
* @param string aUrl 请求文件地址
* @param string aSavePath 保存地址
* @param string aFileName 文件名
* @param int aTag tag标识
*/
- (void)downloadFileURL:(NSString *)aUrl savePath:(NSString *)aSavePath fileName:(NSString *)aFileName tag:(NSInteger)aTag;
.m实现代码如下:
[objc]
view plain
copy
/**
* 下载文件
*/
- (void)downloadFileURL:(NSString *)aUrl savePath:(NSString *)aSavePath fileName:(NSString *)aFileName tag:(NSInteger)aTag
{
NSFileManager *fileManager = [NSFileManager defaultManager];
//检查本地文件是否已存在
NSString *fileName = [NSString stringWithFormat:@"%@/%@", aSavePath, aFileName];
//检查附件是否存在
if ([fileManager fileExistsAtPath:fileName]) {
NSData *audioData = [NSData dataWithContentsOfFile:fileName];
[self requestFinished:[NSDictionary dictionaryWithObject:audioData forKey:@"res"] tag:aTag];
}else{
//创建附件存储目录
if (![fileManager fileExistsAtPath:aSavePath]) {
[fileManager createDirectoryAtPath:aSavePath withIntermediateDirectories:YES attributes:nil error:nil];
}
//下载附件
NSURL *url = [[NSURL alloc] initWithString:aUrl];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.inputStream = [NSInputStream inputStreamWithURL:url];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:fileName append:NO];
//下载进度控制
/*
[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
NSLog(@"is download:%f", (float)totalBytesRead/totalBytesExpectedToRead);
}];
*/
//已完成下载
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSData *audioData = [NSData dataWithContentsOfFile:fileName];
//设置下载数据到res字典对象中并用代理返回下载数据NSData
[self requestFinished:[NSDictionary dictionaryWithObject:audioData forKey:@"res"] tag:aTag];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//下载失败
[self requestFailed:aTag];
}];
[operation start];
}
}
使用场景:
有时我们做的app在请求网络相关的附件资源时有图片的也有音视频的,请求图片我们常用的第三方库一般是
SDWebImage就足够了,但SDWebImage不支持对像音频、视频及压缩zip等附件的下载支持,这时我们可以利用
AFNetworking的AFHTTPRequestOperation类来完成下载并保存到指定的app的Caches目录下,底层对这块的封装
代码如下:
.h头文件接口
[objc]
view plain
copy
/**
* 下载文件
*
* @param string aUrl 请求文件地址
* @param string aSavePath 保存地址
* @param string aFileName 文件名
* @param int aTag tag标识
*/
- (void)downloadFileURL:(NSString *)aUrl savePath:(NSString *)aSavePath fileName:(NSString *)aFileName tag:(NSInteger)aTag;
.m实现代码如下:
[objc]
view plain
copy
/**
* 下载文件
*/
- (void)downloadFileURL:(NSString *)aUrl savePath:(NSString *)aSavePath fileName:(NSString *)aFileName tag:(NSInteger)aTag
{
NSFileManager *fileManager = [NSFileManager defaultManager];
//检查本地文件是否已存在
NSString *fileName = [NSString stringWithFormat:@"%@/%@", aSavePath, aFileName];
//检查附件是否存在
if ([fileManager fileExistsAtPath:fileName]) {
NSData *audioData = [NSData dataWithContentsOfFile:fileName];
[self requestFinished:[NSDictionary dictionaryWithObject:audioData forKey:@"res"] tag:aTag];
}else{
//创建附件存储目录
if (![fileManager fileExistsAtPath:aSavePath]) {
[fileManager createDirectoryAtPath:aSavePath withIntermediateDirectories:YES attributes:nil error:nil];
}
//下载附件
NSURL *url = [[NSURL alloc] initWithString:aUrl];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.inputStream = [NSInputStream inputStreamWithURL:url];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:fileName append:NO];
//下载进度控制
/*
[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
NSLog(@"is download:%f", (float)totalBytesRead/totalBytesExpectedToRead);
}];
*/
//已完成下载
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSData *audioData = [NSData dataWithContentsOfFile:fileName];
//设置下载数据到res字典对象中并用代理返回下载数据NSData
[self requestFinished:[NSDictionary dictionaryWithObject:audioData forKey:@"res"] tag:aTag];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//下载失败
[self requestFailed:aTag];
}];
[operation start];
}
}
相关文章推荐
- AFNetworking下载网络相关的附件(音视频)等到本地app包中做离线来提高用户体验
- AFNetworking下载网络相关的附件(音视频)等到本地app包中做离线来提高用户体验
- AFNetworking下载网络相关的附件(音视频)等到本地app包中做离线来提高用户体验
- AFNetworking下载网络相关的附件(音视频)等到本地app包中做离线来提高用户体验
- AFNetworking下载网络相关的附件(音视频)等
- 通过AFNetworking下载网络闪屏用的图片并存储到本地同时获取header头相关信息
- 通过AFNetworking下载网络闪屏用的图片并存储到本地同时获取header头相关信息
- AFNetWorking下载网络音乐视频或者图片
- 企业网站如何用网站APP提高用户体验
- AVPlayer 本地、网络视频播放相关
- android MediaPlayer 视频开发+SurfaceHolder(可网络本地,以及加上倒计时和网络下载到本地流畅播放)
- AVPlayer 本地、网络视频播放相关
- 如何提高网页中图片显示的用户体验(附源码下载)
- 如何提高网页中图片显示的用户体验(附源码下载)
- 游戏开发中切换网络时怎么提高用户体验
- iOS 开发App捕获异常, 反馈给服务器, 提高用户体验
- 为用户节省流量,app第一次安装或升级启动时,本地进行一些必要基础数据的存储,避免多余的下载
- 优化app的离线用户体验
- 如何提高手机APP的用户体验?