Ionic2项目中录制音频上传Firebase Storage出现空文件问题求助
解决Ionic2音频文件上传Firebase Storage为空的问题
嘿,我一眼就看出你这问题的症结啦!你现在上传的根本不是音频文件本身,而是文件路径的字符串,所以Firebase里才会出现只有95字节的空内容——那串路径文本的大小刚好就是这么多😂
问题根源
你写的var blob = new Blob([filePath], {type: 'audio/mp3'});这里,filePath是一个字符串(比如/storage/emulated/0/xxx.mp3),Blob会把这个字符串当成普通文本打包,自然不是你要的音频二进制数据。
正确的解决步骤
得先用Ionic的File插件读取本地音频文件的二进制内容,再把它转换成Blob上传,具体代码如下:
// 初始化Storage引用和元数据 const storageRef = firebase.storage().ref(); const metadata = { contentType: 'audio/mp3' }; const filePath = `${this.file.externalDataDirectory}${this.fileName}`; const voiceRef = storageRef.child(`voices/${this.fileName}`); // 关键:读取音频文件的二进制数组缓存 this.file.readAsArrayBuffer(this.file.externalDataDirectory, this.fileName) .then(arrayBuffer => { // 用二进制数据创建真正的音频Blob const audioBlob = new Blob([arrayBuffer], { type: 'audio/mp3' }); // 上传Blob到Firebase Storage return voiceRef.put(audioBlob, metadata); }) .then(uploadSnapshot => { console.log('音频上传成功!', uploadSnapshot); // 可选:获取文件的下载URL return uploadSnapshot.ref.getDownloadURL(); }) .then(downloadUrl => { console.log('音频文件下载地址:', downloadUrl); // 这里可以把下载URL存到Firebase数据库里 }) .catch(error => { console.error('上传失败:', error); });
额外注意事项
- 确保你的App已经申请了读取外部存储的权限(Android平台需要
READ_EXTERNAL_STORAGE权限),不然会读取文件失败。 - 如果你的音频格式不是MP3,记得把
contentType改成对应的类型(比如audio/wav)。
内容的提问来源于stack exchange,提问作者Khaled Ramadan
相关产品推荐
相关产品推荐

