Сохраните PDF-файл из электронной почты, используя nodejs fs - PullRequest
0 голосов
/ 07 августа 2020

Я использую пакет npm под названием mail-notifier для обработки новых писем по мере их поступления, я хочу иметь возможность сохранять вложения в папку, и node fs, похоже, может это сделать, но я не могу разберись.

Это пример того, как приходит вложение.

{
  contentType: 'application/pdf',
  transferEncoding: 'base64',
  contentDisposition: 'attachment',
  fileName: 'somedocument.pdf',
  generatedFileName: 'somedocument.pdf',
  contentId: 'f0b4b8a7983590814558ce2976c71629@mailparser',
  checksum: 'bc084ae645fd6e6da0aa4d74c9b95ae6',
  length: 29714,
  content: <Buffer 25 50 44 46 2d 31 2e 34 0a 25 d3 eb e9 e1 0a 31 20 30 20 6f 62 6a 0a 3c 3c 2f 43 72 65 61 74 6f 72 20 28 43 68 72 6f 6d 69 75 6d 29 0a 2f 50 72 6f 64 ... 29664 more bytes>
}

Это то, что я пробовал из того, что я видел в другом месте, но там написано

mail.attachments.forEach((attachment) => {
 var output = fs.createWriteStream('/example-folder/' + attachment.generatedFileName);
 attachment.stream.pipe(output);
});

Это вызывает ошибку, хотя и говорит, что stream.pipe не является функцией.

Могу ли я передать буфер в поток записи? Буфер имеет какое-то отношение к этому?

Ответы [ 2 ]

2 голосов
/ 07 августа 2020

Попробуйте поток

const { PassThrough } = require('stream');
 
 
mail.attachments.forEach((attachment) => {
    var output = fs.createWriteStream('/example-folder/' + attachment.generatedFileName);
    var pass = new PassThrough();
    pass.end(attachment.content);
    pass.pipe(output);
});
1 голос
/ 07 августа 2020

Поскольку файл хранится в attachment.content как Buffer, можно использовать два метода:

  1. вы можете использовать fs.writeFile('/example-folder/' + attachment.generatedFileName, attachment.content ); или
  2. output.write(attachment.content); (.end, если вы также хотите закрыть файл)

(1) использует API без потоковой передачи, а (2) использует API потоковой передачи, но не имеет преимущества в производительности, поскольку весь файл уже в памяти

...