如何将二进制缓冲区解码为 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 中