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

Posted

技术标签:

【中文标题】如何将二进制缓冲区解码为 node.js 中的图像?【英文标题】:How to decode a binary buffer to an image in node.js? 【发布时间】:2015-12-28 21:35:00 【问题描述】:

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

V�q)�EB\u001599!F":"����\u000b��3��5%�L�\u0018��pO^::�~��m�

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");
    
);

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

问题发生在我相信之前。当我登录 buffer 时,它是空的,buffer.length 也返回 0。 那么可能req.body为空? 我在退出req.body时直接复制的引用中的内容。 你检查缓冲区字节长度了吗?【参考方案2】:

问题是 body-parser 不解析 content-type: octet-stream 并且我覆盖了标头以将其解析为缓冲区无法理解的 url-encoded-form,即使我能够记录请求正文。下面的中间件允许解析 content-type: octet-stream for 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();
  );
);

【讨论】:

以上是关于如何将二进制缓冲区解码为 node.js 中的图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Node.js 缓冲区显示 JPG 图像(UInt8Array)

将 HTML 作为图像渲染到 Node.js 中的 Buffer 中

Node.js的Buffer(缓冲区)和Stream

MongoDB & Multer - 如何将缓冲区二进制文件转换为图像?

Node JS在rest api响应中返回图像[关闭]

如何将文件缓冲区转换为 <img> 标签 src?