连接缓冲区 returns 损坏图像 node.js
Concatting buffer returns corrupt image node.js
我正在尝试做一个图片上传服务。我目前正在获取发送的数据,将其存储在一个数组中,然后使用 concat 函数将它们放在一起。然后我试图保存收到的数据(图像)。但是,当您查看输出的图像时,它已损坏。
app.post('/upload', function(req, res) {
var buffers = []
req.on("data", function(chunk) {
buffers.push(chunk)
})
req.on("end", function() {
console.log(buffers);
Buffer.concat(buffers);
fs.writeFileSync(`/Users/dangray2004/Documents/HTML/Dimg/images/image1.png`, buffers)
})
res.render('upload', {
})
})
如果有人能提供帮助,我们将不胜感激。
你可以试试这个方法,对我来说效果很好:
app.post('/upload', function(req, res) {
var buffer = new Buffer('');
req.on('data', function(chunk) {
console.log("data chunk: " + chunk.length);
buffer = Buffer.concat([buffer, chunk]);
});
req.on("end", function() {
console.log("req.end: " + buffer.length);
fs.writeFileSync("test.png", buffer);
})
});
原始代码不起作用的原因是 Buffer.concat()
没有修改它作为参数接收的数组。它 returns 一个新的 Buffer,其内容是数组参数成员的串联。现在你的代码在这里:
Buffer.concat(buffers);
不收集返回的Buffer,这:
fs.writeFileSync('filename', buffers)
将原始缓冲区数组的内容写入文件——这几乎就是您想要的,只是它在将成员写入文件时会在每个成员的数据之间插入一个逗号。那些多余的逗号会破坏图像数据。
要修复,请将这两行替换为收集 concat
返回的新缓冲区并将其写入文件的代码:
var buffer = Buffer.concat(buffers);
fs.writeFileSync('filename', buffer);
或者只是:
fs.writeFileSync('filename', Buffer.concat(buffers));
我正在尝试做一个图片上传服务。我目前正在获取发送的数据,将其存储在一个数组中,然后使用 concat 函数将它们放在一起。然后我试图保存收到的数据(图像)。但是,当您查看输出的图像时,它已损坏。
app.post('/upload', function(req, res) {
var buffers = []
req.on("data", function(chunk) {
buffers.push(chunk)
})
req.on("end", function() {
console.log(buffers);
Buffer.concat(buffers);
fs.writeFileSync(`/Users/dangray2004/Documents/HTML/Dimg/images/image1.png`, buffers)
})
res.render('upload', {
})
})
如果有人能提供帮助,我们将不胜感激。
你可以试试这个方法,对我来说效果很好:
app.post('/upload', function(req, res) {
var buffer = new Buffer('');
req.on('data', function(chunk) {
console.log("data chunk: " + chunk.length);
buffer = Buffer.concat([buffer, chunk]);
});
req.on("end", function() {
console.log("req.end: " + buffer.length);
fs.writeFileSync("test.png", buffer);
})
});
原始代码不起作用的原因是 Buffer.concat()
没有修改它作为参数接收的数组。它 returns 一个新的 Buffer,其内容是数组参数成员的串联。现在你的代码在这里:
Buffer.concat(buffers);
不收集返回的Buffer,这:
fs.writeFileSync('filename', buffers)
将原始缓冲区数组的内容写入文件——这几乎就是您想要的,只是它在将成员写入文件时会在每个成员的数据之间插入一个逗号。那些多余的逗号会破坏图像数据。
要修复,请将这两行替换为收集 concat
返回的新缓冲区并将其写入文件的代码:
var buffer = Buffer.concat(buffers);
fs.writeFileSync('filename', buffer);
或者只是:
fs.writeFileSync('filename', Buffer.concat(buffers));