【问题标题】:How to store audio file in sqlite database in iOS如何在 iOS 的 sqlite 数据库中存储音频文件
【发布时间】:2016-07-16 18:29:14
【问题描述】:

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

【问题讨论】:

  • 为什么要将它存储在数据库中?在关系数据库中存储大量二进制数据不是一个好主意。通常所做的是将数据存储在普通文件中,并将其名称存储在数据库中。
  • @trojanfoe 感谢您的回复。请给我适当的指导。我对 iOS 开发完全陌生..
  • 与iOS无关;无论平台/语言/等如何,我都会有相同的评论。
  • 嗨 Satya,我想提高对您项目的认识。与音频相关的版权有多种类型。有些仅允许流式传输,并且不允许将数字数据存储在您的设备上。我相信你已经解决了这个问题。
  • 在请求将数据保存为 blob 的全部代码之前,您为什么不做功课呢?我是初学者的借口不是免费午餐的门票。

标签: ios objective-c iphone sqlite asihttprequest


【解决方案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}]];

注意如果您存储的完整路径不起作用,因为每当您运行应用程序时文档文件夹路径都会更改。

【讨论】:

  • 感谢您的回复。现在如何从 sqlite DB 中获取音频文件
  • 为什么要将文件存储在文档文件夹中?
  • 您不能将文件存储在数据库中。将该文件写入文档 Dic。并获取写入路径并将该路径存储在数据库中。
  • 是的,我知道,但这并不意味着您必须将文件存储在 Documents 文件夹中,在某些情况下,该文件夹在 iTunes 等中可见。可以使用其他文件夹...
  • 我可能是错的,但是通过将 UIFileSharingEnabled plist 参数设置为 NO,可能会为 iTunes 隐藏 Documents 文件夹内容。无论如何,木马是对的,如果您不希望所有人看到您的应用程序内部,最好使用一些不同的文件夹(例如库)。
【解决方案2】:

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

【讨论】:

  • @heximal 感谢您的指导。但我很困惑如何在应用程序文档文件夹中存储文件你能提供任何示例代码吗..
  • @heximal 我不明白如何在 sqlite DB 中存储音频文件以及如何从 sqlite DB 中获取音频文件,你能给我示例或示例代码吗?我会尽力理解..提前谢谢
  • 在 Chirag D jinjuwadiya 下面的答案中,我演示了如何将文件存储到文档文件夹。您的项目中是否已经有任何处理 sqlite 的代码?
  • @heximal 直到现在我还没有编写任何与 sqlite 相关的代码。所以给我任何示例代码如何在 sqlite DB 中存储音频文件以及如何从 sqlite DB 获取音频文件。所以我很容易理解..提前谢谢
猜你喜欢
  • 2016-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 2015-09-25
  • 2016-12-11
  • 2021-09-30
相关资源
最近更新 更多