2014-01-08 59 views
1

我试图通过使用phonegap的File API上传捕获的音频文件。我将音频文件录制为mp3文件,然后在文件系统中找到该文件,然后将文件上传到服务器。该文件的记录工作正常,我可以在我的本地存储中播放它。该文件的上传也似乎工作正常,但我无法播放上传的MP3文件。所以我问什么?是我尝试上传的录制文件的路径是否正确,并且实际上是否从媒体文件中获得了正确的base64编码字符串,或者是由于我的设备无法找到我正在寻找的文件而创建新文件?目前我正在使用Android,但如果它是iOS的怪癖,我也很想知道它们。当我创建mp3文件时,它存储在my/storage/emulated/0目录中。当我在Firefox中打开mp3文件时,mp3文件的持续时间仅为1秒,应该是7秒。可能是什么问题呢?我非常感谢能够获得的每一个帮助,你可以在下面看到我的代码。上传带phonegap的媒体文件,Android

// 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文件,但我无法播放它。我真的很感谢我能得到的每一个帮助

+0

大问题,将您uload代码的回调函数里面readDataUrl()!!!!!!!我也有同样的问题!!!!!!当我发现它时会发布一个答案,如果它不是先来这里的话!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! – Femtosecond

回答

0

也许你的问题是,当你尝试上传文件时,文件读取是同步的并且文件没有被完全读取?

你可以尝试(刚过base = evt.target.result;线)

+0

我会尽力做到这一点,或使其同步。 reader.readAsDataURL(文件)到底做了什么? –

+0

情况并非如此。我启用了在readDataURL()之后上传base64字符串的按钮。听录制的音频我仍然有问题:( –