NodeJS 将png图像从缓冲区保存到磁盘上的文件

7nbnzgx9  于 2023-06-22  发布在  Node.js
关注(0)|答案(2)|浏览(204)

我正在获取收到的电子邮件和它的附件,我想存储它的. png图像附件到本地存储。
获取后立即有我的附件对象:

{ contentType: 'image/png',
       fileName: '1,10.png',
       contentDisposition: 'inline',
       transferEncoding: 'base64',
       contentId: 'ii_jmykpyn60',
       generatedFileName: '1,10.png',
       checksum: 'b3f3de7de2ba946ff23ba2e41df87fae',
       length: 7942,
       content:
        <Buffer 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 02 66 00 00
 01 cc 08 02 00 00 00 f0 21 f3 c8 00 00 00 01 73 52 47 42 00 ae ce 1c e9 00 00 00
 04 ... > }

另外,当我通过POST请求将其作为“图片”发送时,内容更改为:

picture:
    { type: 'Buffer',
         data:
          [ 137,
            80,
            78,
            71,
            13,
            10,
            26,
      ... 7842 more items ] }

我想得到我的图像的代码是:

var decims = req.body.picture.data.join(" ")

    const buf = Buffer.from(decims);

    fs.writeFile('image.png', buf, {encoding: 'base64'}, function(err) {
      console.log('File created');
    });

image.png出现在我的文件夹,但它的破碎.

ymzxtsji

ymzxtsji1#

首先,将Buffer转换为base64,然后保存文件。

const bufferArray = req.body.picture.data;
  
const base64Image = btoa(
    bufferArray.reduce((data, byte) => data + String.fromCharCode(byte), '')
);
  
fs.writeFile(
  path.join(__dirname, 'image.png'), 
  base64Image, 
  { encoding: 'base64' }, 
  function(err){
    console.log('File Created');
  }
);

注:请确保您使用的文件扩展名“.png”与上传的文件扩展名相同。

isr3a4wc

isr3a4wc2#

我认为使用toBuffer函数保存png会更好。
以下是我的工作:

var fs = require("fs");
var Canvas = require("canvas");

var canvas = new Canvas(200, 200, "png");
var g = canvas.getContext("2d");
g.fillStyle = "black";
g.fillRect(0, 0, 100, 100);

var buf = canvas.toBuffer();
fs.writeFileSync("test.png", buf);

相关问题