如何将音频文件上传到Firebase存储?

时间:2018-01-12 08:13:35

标签: angularjs cordova firebase ionic2 firebase-storage

  

我正在尝试将音频文件上传到我的Ionic2项目中的Firebase存储。

首先我使用Media插件(Cordova插件)录制了一个音频文件,这个文件播放得很好。来自Android存储和媒体插件方法(this.media.play()...;)。

其次,我需要将录制的文件推送到Firebase存储。

这是我的代码:

  let storageRef = firebase.storage().ref();
  let metadata = {
     contentType: 'audio/mp3',
   };
  let filePath = `${this.file.externalDataDirectory}`+`${this.fileName}`;
  const voiceRef = storageRef.child(`voices/${this.fileName}`);  
  var blob = new Blob([filePath], {type: 'audio/mp3'});
  voiceRef.put(blob);
  

阅读Firebase文档后,我可以将blob推送到Firebase。

使用空数据(95字节)将文件成功推送到Firebase存储。

这是截图: enter image description here

1 个答案:

答案 0 :(得分:2)

  

问题不是Firebase问题

使用文件 cordova插件方法(readAsDataURL())和putString(fileBase64,firebase.storage.StringFormat.DATA_URL)方法解决了我的问题。

首先,我创建了一个文件引用: let filePath = "this.file.externalDataDirectory" + "this.fileName";

然后我使用 readAsDataURL 方法将文件转换为base64字符串,该方法返回包含该文件作为字符串base64的promise。另外,我使用 putString 方法将文件推送到Firebase,该方法有两个参数: readAsDataURL 返回的文件,第二个是firebase.storage.StringFormat.DATA_URL。< / p>

我的最终代码:

  let storageRef = firebase.storage().ref();
  let metadata = {
    contentType: 'audio/mp3',
  };
  let filePath = `${this.file.externalDataDirectory}` + `${this.fileName}`;
  this.file.readAsDataURL(this.file.externalDataDirectory, this.fileName).then((file) => {
    let voiceRef = storageRef.child(`voices/${this.fileName}`).putString(file, firebase.storage.StringFormat.DATA_URL);
    voiceRef.on(firebase.storage.TaskEvent.STATE_CHANGED, (snapshot) => {
      console.log("uploading");
    }, (e) => {
      reject(e);
      console.log(JSON.stringify(e, null, 2));
    }, () => {
      var downloadURL = voiceRef.snapshot.downloadURL;
      resolve(downloadURL);
    });
  });

这对我来说很好。 感谢。