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

我正在开发一个音频播放器的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]; 

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

您可以使用应用程序中的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}]]; 

请注意, 如果存储无法正常工作的完整路径,则因为文档折叠路径会在您运行应用时发生更