如何将此blob字段发送到服务器?

时间:2014-08-14 16:44:28

标签: javascript audio blob audio-recording

我正在使用亚光钻石的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”和然后保存到服务器。

希望这个问题有道理,有人可以提供帮助。

1 个答案:

答案 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)