我正在使用Recorder.js,它允许您显示类似的录音
recorder.exportWAV(function(blob) {
var url = URL.createObjectURL(blob);
var au = document.createElement('audio');
au.controls = true;
au.src = url;
}
但是如何将blob保存到数据库?假设我有一个Recordings集合:
recorder.exportWAV(function(blob) {
Recordings.insert({data: blob});
}
只会存储此
{data: { "type" : "audio/wav", "size" : 704556 }}
没有实际内容。
答案 0 :(得分:2)
在观看来自eventedmind.com的文件上传剧集之后,事实证明这样做的方法是使用FileReader将blob读取为ArrayBuffer,然后将其转换为Uint8Array以存储在mongo中:
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
答案 1 :(得分:0)
以防万一,您是否注意到这一行in their example
确保您使用的是最近版本的Google Chrome 这一刻只适用于Google Chrome Canary。
我很快就需要为自己的项目调查一下,希望你能让它运行起来。