Как декодировать двоичный буфер для изображения в 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) {