конвертировать аудио файл в base64 в ионный 3 - PullRequest
0 голосов
/ 01 июля 2018

Я пытаюсь сохранить аудио и отправить его на сервер в 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...

Так есть идеи, что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 01 июля 2018

Этого можно добиться, используя FileReader.readAsDataURL () :

let reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
  let base64 = reader.result // Here is your base64.
}
0 голосов
/ 01 марта 2019

Используйте мой ответ в этом посте. Это официальная библиотека. Ionic 3 получает base64 аудио строку из записанного файла

Чтобы добавить плагин в ваш проект:

  1. Используйте: ionic cordova plugin add com-badrit-base64, чтобы добавить pluggin.
  2. Использование: npm install @ionic-native/base64 для добавления модуля в вашем проекте и вашем пакете. json
  3. Импорт в ваш module.ts импорт библиотеки, например: import { Base64 } from "@ionic-native/base64";

  4. Добавьте его в провайдеры JSON.

    providers:[
          Camera,
          Media,
          File,
          SpeechRecognition,
          Base64,
    ],
    
  5. Объявите эту новую библиотеку в конструкторе вашего компонента: private base64:Base64,

  6. Используйте метод.

    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;
    });
    
0 голосов
/ 01 июля 2018

У меня есть другое решение для этого! так как базовый родной bas64 не работал должным образом

Решение

У меня есть эта удивительная библиотека , которую я использовал раньше для преобразования звука в базу 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);
    }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...