【问题标题】:How to decode a binary buffer to an image in node.js?如何将二进制缓冲区解码为 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");
    }
});

【问题讨论】:

    标签: javascript node.js buffer fs


    【解决方案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();
      });
    });
    

    【讨论】:

      猜你喜欢
      • 2019-07-29
      • 1970-01-01
      • 2021-07-09
      • 2012-05-08
      • 2020-05-10
      • 1970-01-01
      • 2011-08-25
      • 2010-09-06
      • 2016-09-16
      相关资源
      最近更新 更多