我正在使用亚光钻石的audiojs记录库,它会创建一个引用/指向本地内存地址的blob。这是在html5音频播放器中返回的,可以播放。它看起来像这样:blob:https%3A // www.voicebitz.com / cd83d7e9-dc49-4b1e-9b9a-c45260af5756
我的问题是如何使用这些信息并将其发送到服务器以使用java脚本将音频存储在服务器上?
我尝试按原样发送,但是blob无法识别。这是我试图做的没有运气。
function test_convert(){
var blob = $("#playas_curr_0").find("audio").attr('src');
console.log("the blob " + blob + " " + blob.size + " " + blob.type); //returns the string "blob:https%3A//..." for blob and undefined for size and type
var whatsthis = Object.prototype.toString(blob);
console.log(whatsthis); //returns Object
var arrayBuffer;
var fileReader = new FileReader();
fileReader.onload = function(){
var convertthis = fileReader.readAsArrayBuffer(blob); //errors out is not recognized as a blob
}
}
注意:在我从评论者那里得到更多澄清后,问题发生了变化。 原文如下。 我意识到它是本地的,但我想把那个blob然后上传到服务器。我知道这里有关于保存到服务器的其他问题/答案,甚至这个库也可以这样做,但我想将这个过程分开,以便它不会一次性完成。
例如,我想要制作的流程是:在录音机开始停止动作上记录本地,我对录音感到满意,所以我想保存它,我按下一个保存按钮,它抓住了这个“blob”和然后保存到服务器。
希望这个问题有道理,有人可以提供帮助。
答案 0 :(得分:0)
在我的项目中,我只是使用ajax在数据字段中发布blob。
function uploadAudio(mp3Data){
var reader = new FileReader();
reader.onload = function(event){
var fd = new FormData();
var mp3Name = encodeURIComponent('audio_recording_' + new Date().getTime() + '.mp3');
console.log("mp3name = " + mp3Name);
fd.append('fname', mp3Name);
fd.append('data', event.target.result);
$.ajax({
type: 'POST',
url: '/api/sessions/'+localStorage.sessionID+'/audio',
data: fd,
processData: false,
contentType: false
});
};
reader.readAsDataURL(mp3Data);
}
致电:
uploadAudio(blob)