我正在尝试将音频文件上传到我的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存储。
答案 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);
});
});
这对我来说很好。 感谢。