我正在尝试保存音频并将其发送到ionic 3中的服务器。
record(){
if (this.platform.is('ios')) {
this.fileName = 'record'+new Date().getDate()+new Date().getMonth()+new
Date().getFullYear()+new Date().getHours()+new Date().getMinutes()+new
Date().getSeconds()+'.3gp';
this.filePath = this.file.documentsDirectory.replace(/file:\/\//g, '') +
this.fileName;
this.audio = this.media.create(this.filePath);
} else if (this.platform.is('android')) {
this.fileName = 'record'+new Date().getDate()+new Date().getMonth()+new
Date().getFullYear()+new Date().getHours()+new Date().getMinutes()+new
Date().getSeconds()+'.3gp';
this.filePath = this.file.externalDataDirectory.replace(/file:\/\//g, '')
+ this.fileName;
this.audio = this.media.create(this.filePath);
}
this.audio.startRecord();
this.recording = true;
}
停止记录后,我想将base64中的音频文件发送到服务器。所以我正在使用base64插件将音频文件转换为base64。
this.base64.encodeFile(this.filePath).then((base64File: string) => {
// let audiooo = encodeURIComponent(base64File);
this.sendVoice(encodeURIComponent(base64File));
}, (err) => {
console.log(err);
});
但是,使用此插件,我得到具有以下值的base64File:
data%3Aimage%2F%3Bcharset%3Dutf-8%3Bbase64%2C%2f%2FFsQBIF%2FAFAC....
I cannot play this encoded audio after sending it to the server, i believe it is because the file starts data%3Aimage... not with data%3Aaudio...
所以你知道我在做什么错吗?
答案 0 :(得分:1)
在这篇文章中使用我的答案。这是一个官方图书馆。 Ionic 3 get base64 audio string from recorded file
要将插件添加到您的项目中:
ionic cordova plugin add com-badrit-base64
添加
插件npm install @ionic-native/base64
添加模块
在您的proyect和package.json 以module.ts
import { Base64 } from "@ionic-native/base64";
导入库
将其添加到提供程序JSON中。
providers:[
Camera,
Media,
File,
SpeechRecognition,
Base64,
],
在组件的构造函数中声明此新库:private base64:Base64,
使用该方法。
this.base64.encodeFile(this.filePath + this.fileName).then(
(base64:any) =>{
console.log('file base64 encoding: ' + base64);
var x = base64.substr(13,base64.length);
x = "data:audio/mpeg;base64" + x;
});
答案 1 :(得分:0)
对此我有不同的解决方案!因为基本的本地bas64无法正常工作
解决方案
我有一个很棒的 library ,我以前曾使用它进行过音频转换为base 64
//将音频MP3编码为Base64
var pathToFile =“ /pathToFile/audio.mp3”;
Base64ToAudio.readAudio(pathToFile,
function(sourceAudio)
{
console.log(sourceAudio) //Return Base64 String
},
function(error)
{
console.log(error);
}
);
//Decode Audio MP3 from Base64 and save file on storage.
var conf = { "b64string": sourceAudio, "filename": "new-voice.mp3", "folder": "/pathToDirectory/", "overwrite": true };
Base64ToAudio.saveAudio(conf,
function(success){
console.log(success); //Return OK when the file is generated.
},
function(error){
console.log(error);
}
);
答案 2 :(得分:0)
您可以使用FileReader.readAsDataURL()来实现:
let reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
let base64 = reader.result // Here is your base64.
}