PhoneGap、Androidでメディアファイルをアップロードします
-
20-12-2019 - |
質問
im PhoneGapのファイルAPIを使用してキャプチャしたオーディオファイルをアップロードしようとしています。オーディオファイルをMP3ファイルとして録音し、ファイルシステム内のファイルを見つけ、後でファイルをサーバーにアップロードします。ファイルの録音はうまく機能し、私のローカルストレージでそれを再生することができます。ファイルのアップロードもうまく機能しているようですが、アップロードしたときにMP3ファイルを再生できません。だから私は尋ねるのですか。録音されたファイルへのパスは正しいアップロードしようとしていますか、そして私はメディアファイルから正しいbase64エンコード文字列を取得するか、私のデバイスの探しているファイルを見つけることができないので、私は新しいファイルを作成します。現時点では、im Androidを取り組んでいますが、iOSのための癖であるならば、私はそれらを本当に知りたいと思います。 MP3ファイルを作成すると、それは私の/ storage / emaped / 0ディレクトリに保存されます。 FirefoxでMP3ファイルを開くと、MP3ファイルの期間は、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.
});
.
ファイルはParseオブジェクトにMP3ファイルとして正常に保存されましたが、再生できません。私は私が得ることができるすべての助けに本当に感謝します
解決
あなたの問題は、ファイルの読み取りがassynchronousで、ファイルをアップロードしようとすると、ファイルが読んで読み取られないことですか?
READDATAURL()のコールバック関数内にUload Codeを移動しようとする(base = evt.target.result;
行の直後)