将mp3转换为base64 - 文件阅读器

时间:2016-08-10 09:01:43

标签: javascript cordova audio base64 media

我正在开发一个需要录制音频的应用程序,然后将音频存储为对象的一部分,并上传到数据库。 我试图首先提醒文件的base64只是为了确保它已被正确找到。 我使用cordova媒体捕获插件访问设备上的录像机,并能够录制音频,但是一旦录制完毕,我想在发送到数据库之前转换为base64格式。当我使用这个方法时它会提醒base64,但它是空的,只是“data:audio / mpeg; base64”,之后没有任何内容,我不知道它为什么没有正确转换文件。

插件: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);
  }
}

1 个答案:

答案 0 :(得分:1)

我遇到了很多问题,并且已经查看了StackOverFlow的答案,但是很难找到答案,所以对于未来有这个问题的人我能够解决它。问题是我想要转换为base64的文件有一个" start"和#34;结束"两者都设置为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);
    }
}