将 pdfmake 缓冲区上传到 s3

1 pdf amazon-s3 node.js pdfmake

如何将我在 pdfmake 中创建的 pdf 上传到 s3?

当我使用下面的代码将 pdf 上传到 S3 时,我创建了一个文件,但是当我打开该文件时,它是一个空白 pdf。我知道我的文档定义创建了一个正确的 pdf,因为我可以将其输出到控制台并在 pdfmake 站点上验证它。

    pdfMake.createPdf(dd).getBuffer((buffer) => {
      var s3 = new AWS.S3()

      s3.putObject({
            Bucket: s3UserFilesBucket,
            Key: 'filename.pdf',
            Body: buffer.toString('binary')
      }, function (resp) {

      })
    })
Run Code Online (Sandbox Code Playgroud)

当我在记事本++中打开在s3中创建的文件时,它“看起来”像一个正确的pdf。即它开始于

%PDF-1.3

并且有很多特殊字符。

如果我将文档定义复制到 pdfmake Playground 并保存 pdf,然后再次在 notepad++ 中查看它,它看起来与我在 s3 中保存的类似,可读文本是相同的,但特殊字符块不同

Riz*_*yed 5

使用缓冲区,然后将相同的缓冲区作为参数传递给 AWS s3.putObject 函数。以下代码将 pdf 文件(由 pdfmake 生成)的正确内容上传到 S3 存储桶。

const pdfMake = printer.createPdfKitDocument(dd);

let chunks = [];

pdfMake.on("data", chunk => {
  chunks.push(chunk);
});

pdfMake.on("end", () => {
  const result = Buffer.concat(chunks);
  var s3 = new AWS.S3();

  s3.putObject(
    {
      Bucket: s3UserFilesBucket,
      Key: "filename.pdf",
      Body: result
    },
    function(resp) {}
  );
});

pdfMake.end();
Run Code Online (Sandbox Code Playgroud)