如何将二进制缓冲区解码为node.js中的图像?

时间:2015-09-30 23:41:05

标签: javascript node.js buffer fs

我正在接收二进制流中的图像,如下所示,但是当我尝试使用以下数据创建缓冲区时,缓冲区似乎为空。缓冲区不能理解这种格式的问题是什么?

  

VQ)EB \ u001599 F":" \ u000b35%L \ u0018pO ^ ::〜米< \ u001eLk%G $ b \ U0003 \ u0011 = QV = A \ u0018OUmB \ u000380a _#\ u001b \ F(3 \ u0003nGjrMt \\ u0014g〜#q构成   GKS @ C_ \ u001cS` \ u000bpsGnzqRg \ FUC \ u0015 \ u001d3E.BI \ u0007

var buffer = new Buffer(req.body, 'binary')
    console.log("BUFFER:" + buffer)
fs.writeFile('test.jpg', buffer, function(err,written){
   if(err) console.log(err);
    else {
     console.log("Successfully written");
    }
});

2 个答案:

答案 0 :(得分:1)

问题是正文解析器没有解析内容类型:octet-stream而且我覆盖了标题以将其解析为url编码形式,即使我能够记录,缓冲区仍然无法理解req.body。下面的中间件允许解析内容类型:octet-stream用于body-parser。

app.use(function(req, res, next) {
   var contentType = req.headers['content-type'] || ''
   var mime = contentType.split(';')[0];
    // Only use this middleware for content-type: application/octet-stream
    if(mime != 'application/octet-stream') {
        return next();
    }
   var data = '';
   req.setEncoding('binary');
    req.on('data', function(chunk) { 
       data += chunk;
   });
   req.on('end', function() {
      req.rawBody = data;
      next();
  });
});

答案 1 :(得分:0)

我认为你应该在调用fs.writeFile时设置编码:

fs.writeFile('test.jpg', buffer, 'binary', function(err) {