gpt4 book ai didi

mongodb - 如何在 meteor 中将 blob 插入 mongodb

转载 作者:可可西里 更新时间:2023-11-01 10:32:57 27 4
gpt4 key购买 nike

我正在使用 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 }}

没有实际内容。

最佳答案

看了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

关于mongodb - 如何在 meteor 中将 blob 插入 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18555771/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com