【问题标题】:How to insert a blob into mongodb in meteor如何在流星中将blob插入mongodb
【发布时间】:2013-09-01 06:10:28
【问题描述】:

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

没有实际内容。

【问题讨论】:

    标签: mongodb meteor blob recorder


    【解决方案1】:

    看了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);
      }
    })
    

    不知道之前的sn-p在其他浏览器上能不能用,不过这个可能:

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

    【讨论】:

      【解决方案2】:

      以防万一,你注意到in their example这一行了吗

      确保您使用的是最新版本的谷歌浏览器,在 这仅适用于 Google Chrome Canary。

      我很快就需要为我自己的项目研究这个,希望你能让它运行起来。

      【讨论】:

      • 我可以录制、回放和下载 wav 文件,这就是我认为该评论所指的内容。我还在这篇文章stackoverflow.com/questions/13333378/… 中看到了如何在 php 中执行此操作的示例,我只是很难将其转换为流星。我尝试使用 collectionapi 来翻译解决方案,但不能。也看到了binaryjs,不过好像需要server对象,不知道从哪里弄。
      猜你喜欢
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多