我正在接收二进制流中的图像,如下所示,但是当我尝试使用以下数据创建缓冲区时,缓冲区似乎为空。缓冲区不能理解这种格式的问题是什么?
VQ)EB \ u001599 F":" \ u000b35%L \ u0018pO ^ ::〜米< \ u001eLk%G $ b \ U0003 \ u0011 = QV = A \ u0018OUmB \ u000380a _#\ u001b \ F(3 \ u0003nGjrMt \\ u0014g〜#q构成 GKS @ C_ \ u001cS` \ u000bpsGnzqRg \ FUC \ 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");
}
});
答案 0 :(得分:1)
问题是正文解析器没有解析内容类型: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();
});
});
答案 1 :(得分:0)
我认为你应该在调用fs.writeFile时设置编码:
fs.writeFile('test.jpg', buffer, 'binary', function(err) {