我正在尝试制作图像上传服务。我目前正在获取发送的数据,将其存储在数组中,然后使用 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', {
})
})
如果有人能提供帮助,我们将不胜感激。
最佳答案
原始代码不起作用的原因是 Buffer.concat()
不会修改它作为参数接收的数组。它返回一个新的 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));
关于arrays - 连接缓冲区返回损坏的图像node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48287755/