загрузить медиафайл с помощью PhoneGap, Android
-
20-12-2019 - |
Вопрос
Я пытаюсь загрузить захваченный аудиофайл с помощью API файлов PhoneGap.Я записываю аудиофайл в формате mp3, затем нахожу его в файловой системе и позже загружаю на сервер.Запись файла работает нормально, и я могу воспроизвести его в своем локальном хранилище.Загрузка файла также работает нормально, но я не могу воспроизвести загруженный mp3-файл.Итак, о чем я спрашиваю;это правильный путь к записанному файлу, который я пытаюсь загрузить, и действительно ли я получаю правильную строку в кодировке Base64 из медиа-файла, или я создаю новый файл, поскольку мое устройство не может найти файл, который я ищу.На данный момент я работаю с Android, но если есть какие-то особенности iOS, мне бы тоже очень хотелось их узнать.Когда я создаю mp3-файл, он сохраняется в моем каталоге /storage/emulated/0.Когда я открываю mp3-файл в Firefox, продолжительность mp3-файла составляет всего 1 с, хотя должна быть 7 с.В чем может быть проблема?Я очень ценю каждую помощь, которую могу получить, вы можете увидеть мой код ниже.
// The src of the mp3 file, works when I play it after in my local storage
src = "recording.mp3";
mediaRec = new Media(src, onSuccess, onError);
// Record audio
mediaRec.startRecord();
// Stop recording after 7 sec
mediaRec.stopRecord();
// get the file from the file system (local storage)
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
// Get the file from the file system
function gotFS(fileSystem) {
fileSystem.root.getFile("recording.mp3", null, gotFileEntry, fail);
}
function gotFileEntry(fileEntry) {
fileEntry.file(gotFile, fail);
}
// the file is successfully retreived
function gotFile(file){
readDataUrl(file);
}
// turn the file into a base64 encoded string, and update the var base to this value.
function readDataUrl(file) {
var reader = new FileReader();
reader.onloadend = function(evt) {
alert(evt.target.result);
base = evt.target.result;
};
reader.readAsDataURL(file);
}
// later when this is done I upload the file to something called parse. This seems to work fine,
var file = new Parse.File("sound.mp3", { base64: base }); file.save().then(function() {
Object.set("soundy", file);
}, function(error) {
alert("an error");
// The file either could not be read, or could not be saved to Parse.
});
Теперь файл успешно сохранен как mp3-файл в объекте анализа, но я не могу его воспроизвести.Я очень ценю каждую помощь, которую могу получить
Решение
возможно, ваша проблема в том, что чтение файла происходит асинхронно и файл не читается полностью, когда вы пытаетесь его загрузить?
Вы можете попытаться переместить код загрузки внутри функции обратного вызова в readDataUrl() (сразу после base = evt.target.result;
линия)