使用 NSURLSession 下载,需要注意的是文件下载文件之后会自动保存到一个临时目录,需要开发人员自己将此文件重新放到其他指定的目录中
// // ViewController.m // Web相关 // // Copyright © 2016年 asamu. All rights reserved. // //http://mr7.doubanio.com/832d52e9c3df5c13afd7243a770c094f/0/fm/song/p294_128k.mp3 #import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewController () @property(nonatomic,strong)AVAudioPlayer *avaudioPlayer; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [self downloadFile]; } -(void)playMusic{ //获取缓存目录 NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject]; //获取缓存目录下的歌曲 NSString *filePath = [cachePath stringByAppendingPathComponent:@"xxx.mp3"]; /* fileURLWithPath: 文件链接 URLWithString: http链接 */ NSURL *fileUrl = [NSURL fileURLWithPath:filePath]; //判断文件存不存在 if( [[NSFileManager defaultManager]fileExistsAtPath:filePath]){ NSLog(@"exist"); NSError *error; _avaudioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:fileUrl error:&error]; if (error) { NSLog(@"%@",error.localizedDescription); } //加入缓存 [_avaudioPlayer prepareToPlay]; //播放 [_avaudioPlayer play]; } } #pragma mark - 私有方法 -(void)downloadFile{ NSString *filename = @"xxx.mp3"; //获取 URL NSString *urlStr = [NSString stringWithFormat:@"http://mr7.doubanio.com/832d52e9c3df5c13afd7243a770c094f/0/fm/song/p294_128k.mp3",filename]; NSURL *url = [NSURL URLWithString:urlStr]; //创建请求 NSURLRequest *request = [NSURLRequest requestWithURL:url]; //创建会话(全局会话) NSURLSession *session = [NSURLSession sharedSession]; //创建任务 NSURLSessionDownloadTask *downloadTak = [session downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) { //获取缓存目录 NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject]; //歌存到缓存目录,并命名 NSString *savePath = [cachePath stringByAppendingPathComponent:filename]; //得到路径,打开终端 open 去掉 xxx.mp3 的目录,就可以直观的看到 MP3文件的下载 NSLog(@"%@",savePath); NSURL *saveurl = [NSURL fileURLWithPath:savePath]; /* 1.location 是下载后的临时保存路径,需要将它移动到需要保存的位置 2.move faster than copy (1).因为 copy 需要在磁盘上生成一个新的文件,这个速度是很慢的; (2).copy 后,还要把临时文件删除,move 这一步就行了 = (copy + remove) 3.move 有两个功能 一是移动 二是重命名 */ NSError *saveError; [[NSFileManager defaultManager]moveItemAtURL:location toURL:saveurl error:&saveError]; //如果错误存在,输出 if (saveError) { NSLog(@"%@",saveError.localizedDescription); } //播放 [self playMusic]; }]; //执行任务 [downloadTak resume]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end
时间: 2024-11-05 18:47:38