Nodemailer-将缓冲区中的png图像保存到磁盘上的文件

时间:2018-10-07 20:52:52

标签: node.js image buffer

我正在获取收到的电子邮件及其附件,我想将其.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出现在我的文件夹中,但已损坏。

1 个答案:

答案 0 :(得分:1)

我认为使用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);