Nodemailer - сохранить изображение в формате png из буфера в файл на диске - PullRequest
0 голосов
/ 07 октября 2018

Я получаю полученные письма и их вложения, и хочу сохранить их вложения изображений .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 голосов
/ 08 октября 2018

Я думаю, что было бы лучше сохранить png с помощью функции toBuffer.

У меня работает следующее:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...