1

我有一个 HTML 文件加载到 S3 存储桶中。此文件旨在用作电子邮件正文的模板。

我使用了这个问题的答案之一(使用节点 fs 从 aws s3 存储桶读取文件)来帮助我将文件从存储桶中取出。现在看来我有缓冲区数据需要转换回 HTML,或者它的字符串版本也可以。到目前为止我尝试过的事情都没有奏效......

这是我获取模板的代码的样子:

async getEmailTemplate() {
    const s3 = new AWS.S3({ apiVersion: '2006-03-01' });
    const params = {
      Bucket: 'myBucket',
      Key: 'templates/email.html',
    };
    const template = await s3.getObject(params).promise();
    return template;
}

当我记录“模板”返回的数据时,它看起来像这样......我需要类似 template.body.toString('latin1') 的东西......

console.log src/services/tests/unit/Controller.test.js:266
    {
      AcceptRanges: 'bytes',
      LastModified: 2020-05-28T19:36:23.000Z,
      ContentLength: 22745,
      ETag: '"1bcc123ba55b5b878109436c1274b94b"',
      ContentType: 'text/html',
      Metadata: {},
      Body: <Buffer 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c 3e 0a 3c 68 74 6d 6c 20 78 6d 6c 6e 73 3a 76 3d 22 75 72 6e 3a 73 63 68 65 6d 61 73 2d 6d 69 63 72 6f 73 6f ... 22695 more bytes>
    }

万一有所不同,模板包含看起来像 ${data.firstName} 的 js 模板文字。当前,当模板在 javascript 文件中硬编码并带有 `` 包围时,电子邮件会正确填充和发送。但我正在尝试更新代码以从外部源中提取模板。

感谢您花时间阅读我的问题...有人对我有建议吗?:)

4

1 回答 1

1

如果您将“body”更改为“Body”,它应该可以工作,这里有一些与您的几乎相同并且工作正常的旧代码:

 let { Body } = await s3.getObject(params).promise();
 return Body.toString(encoding)
于 2020-05-28T21:35:55.660 回答