我正在开发一个需要录制音频的应用程序,然后将音频存储为对象的一部分,并上传到数据库。 我试图首先提醒文件的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);
}
}
答案 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);
}
}