将 mp3 转换为 base64 - 文件 Reader
Convert mp3 to base64 - File Reader
我正在开发一个需要录制音频的应用程序,然后将音频存储为对象的一部分,并上传到数据库。
我试图首先提醒文件的 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);
}
}
我对此有很多问题,并且在整个 Whosebug 中寻找答案,但很难找到答案,因此对于将来遇到此问题的任何人,我都能够解决它。问题是我想转换为 base64 的文件有一个 "start" 和一个 "end",它们都设置为 0,因此正在访问 none 个字节。为确保访问字节,我将起始字节保持为 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);
}
}
我正在开发一个需要录制音频的应用程序,然后将音频存储为对象的一部分,并上传到数据库。 我试图首先提醒文件的 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);
}
}
我对此有很多问题,并且在整个 Whosebug 中寻找答案,但很难找到答案,因此对于将来遇到此问题的任何人,我都能够解决它。问题是我想转换为 base64 的文件有一个 "start" 和一个 "end",它们都设置为 0,因此正在访问 none 个字节。为确保访问字节,我将起始字节保持为 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);
}
}