arrays - 连接缓冲区返回损坏的图像node.js

标签 arrays node.js buffer

我正在尝试制作图像上传服务。我目前正在获取发送的数据,将其存储在数组中,然后使用 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/

相关文章:

php - substr 前两个字母在数组中匹配不起作用

javascript 对象字面量,将同一字面量内的对象值组合在一起

node.js - 如何使用soap和nodejs向chronopost发出运输请求

javascript - 由于数字周围的引号,node.js mysql 查询无法运行

java - 将数组的值从 1 排序到 10,java?

c - 以最少的比较次数对大型数组中的多个不同数字进行二进制搜索

c++ - char 数组到 uint8_t 数组

C++ 如何在 ofstream 中实际使用 pubsetbuf?

javascript - 使用 Redis 更新排序集

c - 如何从缓冲区中逐字读取仅由 ":"分隔的内容?