2016-08-10 3 views
0

Я разрабатываю приложение, которое должно записывать аудио, а затем записывать звук как часть объекта и загружать в базу данных. Я пытаюсь сначала предупредить base64 файла, чтобы убедиться, что оно было найдено правильно. Я использую плагин для записи медиа-данных cordova для доступа к рекордеру на устройстве и могу записывать звук, однако после его записи я хочу конвертировать в формат base64 перед отправкой в ​​базу данных. Когда я использую этот метод, он предупреждает base64, но он пуст, просто «data: audio/mpeg; base64», после чего ничего не известно, я не знаю, почему он не преобразовывает файл правильно.Конвертировать mp3 в base64 - File Reader

Плагин: https://github.com/apache/cordova-plugin-media-capture

function captureSuccess(capturedFiles) { 

    //Convert capturedFiles[0] into var containing file as base64 

    previewFile(capturedFiles); 


    alert("Audio Captured"); 
} 

function captureError() { 
    alert("Audio Not Captured"); 
} 

navigator.device.capture.captureAudio(captureSuccess, captureError, { 
    limit: 1, 
    duration: 20 
    }); 
}); 

/***********************************************************************************/ 

function previewFile(files) { 
    var preview = document.querySelector('img'); 
    var file = files[0]; 
    var reader = new FileReader(); 

    reader.onload = function() { 
    alert(reader.result); 
    }; 

    if (file) { 
    reader.readAsDataURL(file); 
    } 
} 

ответ

0

у меня было много вопросов к этому, и выглядел все более StackOverflow для ответа, но было много проблем найти один, так что для тех, кто в будущем, кто имеет этот вопрос Я смог его решить. Проблема заключалась в том, что файл, который я хотел преобразовать в base64, имел «начало» и «конец», которые были установлены как 0, поэтому ни один из байтов не был доступен. Чтобы обеспечить доступ к байтам, я сохраняю стартовый байт как 0 (так что ничего не меняем) и установите конечный байт так же, как размер файла. Ниже представлен разрешенный код:

$("#btnAudio").click(function() { 


    function captureSuccess(capturedFiles) { 

     var path = capturedFiles[0].fullPath; 
     //Convert capturedFiles[0] into var containing file as base64 

     previewFile(capturedFiles); 


     alert("Audio Captured"); 
    } 

    function captureError() { 
     alert("Audio Not Captured"); 
    } 

    navigator.device.capture.captureAudio(captureSuccess, captureError, { 
     limit: 1, 
     duration: 20 
    }); 
}); 

/***********************************************************************************/ 

function previewFile(files) { 
    var file = files[0]; 
    var reader = new FileReader(); 
    file.end = file.size; 
    var preview = document.querySelector('audio'); 

    reader.onload = function() { 

/*For testing I am just alerting reader.result, but if you want to store the 
base64 just create a var and set its value to reader.result*/ 

     alert(reader.result); 
    }; 
    if (file) { 
     reader.readAsDataURL(file); 
    } 
}