【问题标题】:Blob saved as [object Object] NodejsBlob 保存为 [object Object] Nodejs
【发布时间】:2017-09-29 21:11:14
【问题描述】:

我想用 HTML5 从麦克风录制音频,然后将其发送到服务器进行保存。然而,目前保存的文件只包含[object Object]

这是我的代码的一些 sn-ps。

前端:

console.log(blob);
$http.post('/api/save_recording', blob)
  .success(function(new_recording) {
    console.log("success");
  })

日志打印:

Blob {type: "audio/wav", size: 237612, slice: function}
success

后端:

exports.saveRecording = function(req, res) {
  console.log(req.body);

  fs.writeFile("temp/test.wav", req.body, function(err) {
    if(err) {
      console.log("err", err);
    } else {
      return res.json({'status': 'success'});
    }
  }) 
}

日志打印:{ type: 'audio/wav', size: 786476 }

你能告诉我为什么这不起作用,以及如何解决它吗?

【问题讨论】:

  • 从您的调试来看,在我看来 writeFile 正在对对象进行转换,因为在此之前它没有 [Object object] 的值,但我对 node.js 不够了解回答。 $http.post 处理您传递给它的数据的方式也可能存在问题,因为我过去使用过文件上传指令,我想这有一些困难,但不记得确切的细节。跨度>

标签: node.js angularjs blob


【解决方案1】:

我终于得到了这个工作。使其工作的方法是在客户端对 blob 进行编码,并在服务器上对其进行解码。

前端:

// converts blob to base64
var blobToBase64 = function(blob, cb) {
  var reader = new FileReader();
  reader.onload = function() {
    var dataUrl = reader.result;
    var base64 = dataUrl.split(',')[1];
    cb(base64);
  };
  reader.readAsDataURL(blob);
};

blobToBase64(blob, function(base64){ // encode
  var update = {'blob': base64};
  $http.post('/api/save_recording', update)
    .success(function(new_recording) {
      console.log("success");
    });
});    

后端:

exports.saveRecording = function(req, res) {
  var buf = new Buffer(req.body.blob, 'base64'); // decode
  fs.writeFile("temp/test.wav", buf, function(err) {
    if(err) {
      console.log("err", err);
    } else {
      return res.json({'status': 'success'});
    }
  }); 
};

【讨论】:

    猜你喜欢
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 2014-09-23
    相关资源
    最近更新 更多