【问题标题】:How do I save an audio file into Firebase Realtime Database?如何将音频文件保存到 Firebase 实时数据库?
【发布时间】:2022-02-19 12:22:03
【问题描述】:

我完成了应用程序功能的设置,将基于文本的消息保存到 RTDB(参见下面的代码)。我现在需要能够将用户录制的语音记录保存到 RTDB 中。这些录音将与基于文本的消息交织在一起(它是一个群聊应用程序),即用户可以发送常规文本消息或发送语音记录。如何修改我的消息模型 + 将记录保存到 RTDB 的代码来完成此操作?甚至可以将音频文件保存到 RTDB 中吗?

message.dart

class Message { //text messages only
  final String uid;
  final String text;
  final DateTime timestamp;
  final String type; 

  Message({
    required this.uid,
    required this.text,
    required this.timestamp,
    required this.type,
  });

  Message.fromJson(Map<dynamic, dynamic>? json): //Transform JSON into Message
        uid = json?['uid'] as String,
        text = json?['text'] as String,
        timestamp = DateTime.parse(json?['timestamp'] as String),
        type = json?['type'] as String;

  Map<dynamic, dynamic> toJson() => <dynamic, dynamic>{ //Transforms Message into JSON
    'uid': uid,
    'text': text,
    'timestamp': timestamp.toString(),
    'type': type,
  };

}

message_dao.dart

class MessageDao {

  MessageDao({required this.groupIDPath}): _messagesRef = FirebaseDatabase.instance.reference().child(groupIDPath);

  String groupIDPath; 
  DatabaseReference _messagesRef;

  //Save a single message to the appropriate node based on groupIDPath
  void saveMessage(Message message) {
    _messagesRef.push().set(message.toJson());
  }
  rest of code...
}

【问题讨论】:

    标签: android firebase flutter dart firebase-realtime-database


    【解决方案1】:

    Firebase 实时数据库只能存储 JSON 类型。在实时数据库中存储音频文件效率非常低,因为您需要将它们转换为 JSON 类型(通常是 base64)。

    我建议将文件本身存储在 Cloud Storage 中,为此还有一个 Firebase SDK,然后将对该文件的引用(例如其下载 URL)存储在实时数据库中。

    要了解更多信息,请参阅uploading filesgetting the download URL 上的文档。

    【讨论】:

    • 啊,有道理。问题 - 我应该使用 Cloud Storage 还是 Firestore?哪个会更便宜?这些音频文件只有 10 秒长,但会频繁地将音频文件写入数据库。
    • Firestore 是另一个 NoSQL 数据库,而 Cloud Storage 用于存储文件 - 因此在我的回答中指向后者的链接。
    • 谢谢泡芙!你太有帮助了:)
    猜你喜欢
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2021-10-09
    • 2018-06-21
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多