1. 这里只是说说异步 单线程下载与文件的保存
  2. 以下载一个mp3文件并保存为例:
  3. -(void)loading
  4. {
  5. //设置文件下载地址
  6. NSString *urlString = [NSString stringWithFormat:@"http://zhangmenshiting2.baidu.com/data2/music/14893666/14893666.mp3?xcode=f7e142418de081ff52f81344843b869a&mid=0.73830637514858"];//这里设置的是一个mp3的下载地址
  7. NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes( kCFAllocatorDefault, (CFStringRef)urlString, NULL, NULL,  kCFStringEncodingUTF8 );
  8. NSURL *url =[NSURL URLWithString:encodedString];
  9. //创建NSURLRequest和NSURLConnection,并立即启动连接
  10. NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:5.0f];
  11. NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
  12. if (connection)
  13. {
  14. self.receivedData = [NSMutableData data];//初始化接收数据的缓存
  15. }
  16. else
  17. {
  18. NSLog(@"Bad Connection!");
  19. }
  20. [request release];
  21. [connection release];
  22. }
  23. - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
  24. {
  25. [receivedData setLength:0];//置空数据
  26. long long mp3Size = [response expectedContentLength];//获取要下载的文件的长度
  27. NSLog(@"%lld",mp3Size);
  28. }
  29. //接收NSMutableData数据
  30. - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
  31. {
  32. [receivedData appendData:data];
  33. }
  34. //接收完毕
  35. - (void)connectionDidFinishLoading:(NSURLConnection *)connection
  36. {
  37. [connection cancel];
  38. //在保存文件和播放文件之前可以做一些判断,保证程序的健壮行:例如:文件是否存在,接收的数据是否完整等处理,此处没加,使用时注意
  39. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  40. NSString *documentsDirectory = [paths objectAtIndex:0];
  41. NSLog(@"mp3 path=%@",documentsDirectory);
  42. NSString *filePath = [documentsDirectory stringByAppendingPathComponent: mp3Name];//mp3Name:你要保存的文件名称,包括文件类型。如果你知道文件类型的话,可以指定文件类型;如果事先不知道文件类型,可以在- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response中获取要下载的文件类型
  43. //在document下创建文件
  44. NSFileManager *fileManager = [NSFileManager defaultManager];
  45. [fileManager createFileAtPath:filePath contents:nil attributes:nil];
  46. NSLog(@"mp3 path=%@",filePath);
  47. //将下载的数据,写入文件中
  48. [receivedData writeToFile:filePath atomically:YES];
  49. //播放下载下来的mp3文件
  50. [self playVoice:filePath];
  51. //如果下载的是图片则可以用下面的方法生成图片并显示 create image from data and set it to ImageView
  52. /*
  53. UIImage *image = [[UIImage alloc] initWithData:recvData];
  54. [imgView setImage:image];
  55. */
  56. }
  57. 简单的播放mp3文件的方法:
  58. 使用前要添加库:AudioToolbox.framework和AVFoundation.framework,
  59. //添加头文件
  60. #import <AVFoundation/AVFoundation.h>
  61. #import <AudioToolbox/AudioToolbox.h>
  62. -(void)playVoice:(NSString *)filePath
  63. {
  64. //播放文件的路径
  65. NSURL * musicURL= [[NSURL alloc] initFileURLWithPath:filePath];
  66. //创建音频 播放器
  67. AVAudioPlayer * voicePlayer  = [[AVAudioPlayer alloc] initWithContentsOfURL:musicURL error:nil];
  68. self.thePlayer = voicePlayer;
  69. [voicePlayer release];
  70. [musicURL release];
  71. [thePlayer setVolume:1];   //设置音量大小
  72. thePlayer.numberOfLoops = -1;//设置音乐播放次数  -1为一直循环
  73. //播放mp3,如果想要实现一些别的功能,可以看看AVAudioPlayer这个类,这里只是实现播放功能
  74. [thePlayer play];
  75. }

UIwebview 文件的下载与保存,以及mp3文件的播放的更多相关文章

  1. 使用a标签实现文件的下载与保存

    <a>标签的常规使用是定义超链接,用于从一个页面链接到另一个页面,并且需要指定链接目标href,除了定义超链接外,<a>还可以实现文件的保存,直接设置a标签的href属性,但是 ...

  2. html制作简单框架网页 实现自己的音乐驿站 操作步骤及源文件下载 (播放功能限mp3文件)

    使用HTML语言来设计制作 Hyper Text Markup Language 超文本标记语言 这门语言的特点就是标记,就是把所有的命令单词用<>标记起来,就可以发挥作用 还有一个特点, ...

  3. 四、Mp3文件类型及其判断

    根据前两篇文章的分析,帧分为标签帧和数据帧,MP3文件类型是根据数据帧的类型来分的,文件类型如下表: 位率相等(Constant BitRate) CBR  Mp3文件 位率不等(Variable B ...

  4. 操作MP3文件的元数据

    参见:http://jingyan.baidu.com/article/03b2f78c4d5eae5ea237aee7.html 一.MP3文件的元数据 一个规则的MP3文件大致含有3个部分: TA ...

  5. 使用NSURLConnection实现大文件断点下载

    使用NSURLConnection实现大文件断点下载 由于是实现大文件的断点下载,不是下载一般图片什么的.在设计这个类的时候本身就不会考虑把下载的文件缓存到内存中,而是直接写到文件系统. 要实现断点下 ...

  6. ANDROID_MARS学习笔记_S01原始版_021_MP3PLAYER001_下载mp3文件

    一.简介 1.在onListItemClick()中new Intent,Intent以存储序列化后的mp2Info对象作为参数,启动serivce 2.DownloadService在onStart ...

  7. .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常)

    .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常) 前段时间项目使用一次性读去SQL Server中保存的电子文件的文件流然后返回给客户端保存下载电子文件, ...

  8. 下载远程(第三方服务器)文件、图片,保存到本地(服务器)的方法、保存抓取远程文件、图片 将图片的二进制字节字符串在HTML页面以图片形式输出 asp.net 文件 操作方法

    下载远程(第三方服务器)文件.图片,保存到本地(服务器)的方法.保存抓取远程文件.图片   将一台服务器的文件.图片,保存(下载)到另外一台服务器进行保存的方法: 1 #region 图片下载 2 3 ...

  9. 使用URLConnection下载文件或图片并保存到本地

    有时候需要从网络上面下载图片到本地进行保存,代码如下: package com.jointsky.jointframe.test; import java.io.FileOutputStream; i ...

随机推荐

  1. sqlserver中一些常用的函数总结

    去掉空格方面 LTRIM('内容'):去掉字符串左边的空格 RTRIM('内容'):去掉右边的空格 LTRIM(RTRIM('内容')):去掉字符串左边和右边的空格 REPLACE(‘内容’,' ', ...

  2. CF614A 【Link/Cut Tree】

    题意:求出所有w^i使得l<=w^i<=r 输入为一行,有三个数,分别是l,r,w.意义如题目所描述 输出为一行,输出所有满足条件的数字,每两个数字中间有一个空格 如果没有满足条件的数字则 ...

  3. MySQL学习笔记:三种组内排序方法

    由于MySQ没有提供像Oracle的dense_rank()或者row_number() over(partition by)等函数,来实现组内排序,想实现这个功能,还是得自己想想办法,最终通过创建行 ...

  4. Java读取本地文件(输入流)

    package cn.buaa; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; imp ...

  5. 拥抱 Android Studio 之一:从 ADT 到 Android Studio

    http://kvh.io/cn/embrace-android-studio-migration.html 1. 拥抱变化,拥抱新事物 Android Studio(IntelliJ IDEA)vs ...

  6. Spark(五)Spark任务提交方式和执行流程

    一.Spark中的基本概念 (1)Application:表示你的应用程序 (2)Driver:表示main()函数,创建SparkContext.由SparkContext负责与ClusterMan ...

  7. day7 socket网络编程

    Python Socket网络编程 Socket是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于Socket来完成通信的 ...

  8. day5模块学习 -- time、datetime时间模块

    1.定义 模块:用来从逻辑上组织python(变量,函数,类,逻辑:实现一个功能)代码,本质就是.py结尾的python文件(文件名:test.py,对应的模块名test) 包:用来从逻辑上组织模块的 ...

  9. linux 101 hacks 7crontab

    技巧 74: crontab 书上的这一段我删了,重写一下,用的是ubuntu 16.04系统 参考 每天一个 linux 命令(50):crontab 命令 crond 服务 安装 crontab: ...

  10. 【Java网络编程】基于 UDP 的聊天通信

    使用 udp 协议,写一个基于命令行的聊天软件:客户端跟服务端分别在命令行启动之后,客户端和服务器端可以互相发送数据. 代码实现如下: 一.创建线程 sendThread 和 receiveThrea ...