我正在为音频播放器开发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];
答案 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}]];
注意如果存储无效的完整路径,因为每当您运行应用时,文档折叠路径都会发生变化。