Как декодировать двоичный буфер для изображения в node.js?

Я получаю изображение в двоичном потоке, как показано ниже, однако, когда я пытаюсь создать буфер со следующими данными, буфер кажется пустым. Проблема в том, что буфер не понимает этот формат?

Уф) EB\u001599 F! ":" \ U000b35% L \u0018pO^:: ~ т<\ u001eL к% G $ б \ u0003 \ u0011 = QV = A \u0018OUmB \ u000380a_ # \ u001b \ f (3 \ u0003 nGjr Mt \ \ u0014g ~ # Q g K s @C \ u001cS` \ u000bpsGnzqRg \ ОФП \ 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 ответа

Решение

Проблема заключалась в том, что body-parser не анализирует тип содержимого: 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();
  });
});

Я думаю, что вы должны установить кодировку при вызове fs.writeFile следующим образом:

fs.writeFile('test.jpg', buffer, 'binary', function(err) {
Другие вопросы по тегам