如何在iOS中的sqlite数据库中存储音频文件

时间:2016-03-29 09:24:50

标签: ios objective-c iphone sqlite asihttprequest

我正在为音频播放器开发iPhone应用程序。我想给用户一些选项,以便他们可以通过流式传输来收听歌曲/音乐,或者他们可以下载音频文件并存储在sqlite数据库中。我知道如何以编程方式在应用程序中流式传输音频文件。但我不知道如何使用BLOB将下载的音频文件存储在sqlite数据库中。此外,在将音频文件存储在sqlite DB中后,我需要获取音频文件并播放歌曲。如何从sqlite DB获取音频文件?

这是我下载音频文件的代码。

NSURL *url = [NSURL URLWithString:@"http://www.fileurl.com/example.mp3"];

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

[request setDownloadDestinationPath:[NSString stringWithFormat:@"%@",dataPath]]; 

[request setDelegate:self];

[request startAsynchronous];

2 个答案:

答案 0 :(得分:2)

我不建议将二进制文件存储在数据库中作为blob。 它将使您在将来增加数据库文件大小时遇到​​问题。您将不得不实施智能真空操作,这对大数据量来说非常慢。 我的强烈意见:文件必须存储在文件系统中。将您的文件存储在应用程序文档文件夹中,并在数据库中存储一种链接。

答案 1 :(得分:1)

您可以使用应用程序中的NSDocumentDirectory下载文件并编写音频文件。像

这样的文件夹
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"audio.mp3"]];
[{your audio file in NSData} writeToFile:path atomically:YES];

现在只在数据库中存储“audio.mp3”

从数据库中检索名称为

的数据时
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:{database store name}]];

注意如果存储无效的完整路径,因为每当您运行应用时,文档折叠路径都会发生变化。