2013-09-01 4 views
2

Я использую Recorder.js, который позволяет отображать аудиозапись, как такКак вставить блоб в MongoDB в метеора

recorder.exportWAV(function(blob) { 
    var url = URL.createObjectURL(blob); 
    var au = document.createElement('audio'); 
    au.controls = true; 
    au.src = url; 
} 

Но как я могу сохранить блоб в базу данных? Предполагая, что у меня есть коллекция Recordings:

recorder.exportWAV(function(blob) { 
    Recordings.insert({data: blob}); 
} 

только хранить этот

{data: { "type" : "audio/wav", "size" : 704556 }} 

, который не имеет реального содержания.

ответ

2

После просмотра эпизода загрузки файла из eventedmind.com, оказывается способ сделать это состоит в использовании FileReader прочитать блоб как ArrayBuffer, который затем преобразуется в Uint8Array хранить в Монго:

var BinaryFileReader = { 
    read: function(file, callback){ 
    var reader = new FileReader; 

    var fileInfo = { 
     name: file.name, 
     type: file.type, 
     size: file.size, 
     file: null 
    } 

    reader.onload = function(){ 
     fileInfo.file = new Uint8Array(reader.result); 
     callback(null, fileInfo); 
    } 
    reader.onerror = function(){ 
     callback(reader.error); 
    } 

    reader.readAsArrayBuffer(file); 
    } 
} 

exportWAV обратного вызова затем

recorder.exportWAV(function(blob) { 
    BinaryFileReader.read(blob, function(err, fileInfo){ 
    Recordings.insert(fileInfo) 
    }); 
}); 

Тогда я могу показать одну из моих записей по:

Deps.autorun(function(){ 
    var rec = Recordings.findOne(); 
    if (rec){ 
    var au = document.createElement('audio');  
    au.controls = true; 
    var blob = new Blob([rec.file],{type: rec.type}); 
    au.src = URL.createObjectURL(blob); 
    document.getElementById("recordingslist").appendChild(au); 
    } 
}) 

я не знаю, если предыдущий фрагмент кода работает в других браузерах, но это может:

var base64Data = btoa(String.fromCharCode.apply(null, rec.file)) 
var au = document.createElement('audio'); 
au.controls = true; 
au.src = "data:"+rec.type+";base64,"+base64Data 
0

Только в случае, вы заметили эту линию in their example

Убедитесь, что вы используете последнюю версию Google Chrome, в момент это работает только с Google Chrome Canary.

Вскоре мне нужно будет изучить это для моего собственного проекта, надеюсь, что вы его запустите.

+0

я могу записывать, воспроизведение и загрузить файл WAV, который я думаю, что комментарий имеет в виду. Я также видел примеры того, как это сделать в php в этом сообщении http://stackoverflow.com/questions/13333378/how-can-javascript-upload-a-blob, и мне просто сложно перевести его на метеорит , Я попытался использовать collectionapi для перевода решения, но не смог. Я также видел binaryjs, но для него, похоже, требуется объект сервера, который я не знаю, где его получить. – user2191332