如何将二进制缓冲区解码为 node.js 中的图像?
How to decode a binary buffer to an image in node.js?
我正在接收二进制流中的图像,如下所示,但是当我尝试使用以下数据创建缓冲区时,缓冲区似乎是空的。是缓冲区不理解这种格式的问题吗?
V�q)�EB\u001599!F":"����\u000b��3��5%�L�\u0018��pO^::�~��m�<\u001e��L��k�%G�$b\u0003\u0011���=q�V=��A\u0018��O��U���m�B���\u00038�����0a�_��#\u001b����\f��(�3�\u0003���nGjr���Mt\�\u0014g����~�#�Q��
g�K��s��@C��\u001cS�`\u000bps�Gnzq�Rg�\fu���C\u0015�\u001d3�E.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");
}
});
我认为你应该像这样调用 fs.writeFile 时设置编码:
fs.writeFile('test.jpg', buffer, 'binary', function(err) {
问题是 body-parser 不解析 content-type: octet-stream 并且我重写了 header 以将其解析为 url-encoded-form 缓冲区无法理解,即使我能够记录 req.body。下面的中间件允许解析内容类型:正文解析器的八位字节流。
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();
});
});
我正在接收二进制流中的图像,如下所示,但是当我尝试使用以下数据创建缓冲区时,缓冲区似乎是空的。是缓冲区不理解这种格式的问题吗?
V�q)�EB\u001599!F":"����\u000b��3��5%�L�\u0018��pO^::�~��m�<\u001e��L��k�%G�$b\u0003\u0011���=q�V=��A\u0018��O��U���m�B���\u00038�����0a�_��#\u001b����\f��(�3�\u0003���nGjr���Mt\�\u0014g����~�#�Q�� g�K��s��@C��\u001cS�`\u000bps�Gnzq�Rg�\fu���C\u0015�\u001d3�E.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");
}
});
我认为你应该像这样调用 fs.writeFile 时设置编码:
fs.writeFile('test.jpg', buffer, 'binary', function(err) {
问题是 body-parser 不解析 content-type: octet-stream 并且我重写了 header 以将其解析为 url-encoded-form 缓冲区无法理解,即使我能够记录 req.body。下面的中间件允许解析内容类型:正文解析器的八位字节流。
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();
});
});