NodeJs 失败:应 params.Body 为字符串、缓冲区、流、Blob 或类型化数组对象

NodeJs Failure: Expected params.Body to be a string, Buffer, Stream, Blob, or typed array object

我正在使用 GraphicsMagic 修改图像。在图像上绘制文本后,我需要将结果图像上传到 s3 存储桶。但是我怀疑 toBuffer() 正在返回空结果,因为我收到以下错误:

Failure: Expected params.Body to be a string, Buffer, Stream, Blob, or typed array object

这是我的代码:

 s3.getObject({Bucket: srcBucket, Key: srcKey}).promise()
.then(data => gm(data.Body)
  .fill('white')
  .stroke('black', 1)
  .drawText(0, -60, text.toUpperCase(), 'center')
  .toBuffer(imageType,function (err, buffer) {
    if (err) return handle(err);
    console.log('done!');
  })
)
.then(buffer => s3.putObject({
    Body: buffer,
    Bucket: dstBucket,
    ContentType: buffer.ContentType,
    Key: dstKey,
  }).promise()

)
.then(() => callback(null, {
  statusCode: 200,
  body: JSON.stringify({
    url: dstKey
  })
  })
)
.catch(err => callback(err))

我认为你只能从toBuffer中提供的回调中获取缓冲区。我假设您在代码中将某些函数定义为 callback

s3.getObject({Bucket: srcBucket, Key: srcKey}).promise()
  .then(data => gm(data.Body)
    .fill('white')
    .stroke('black', 1)
    .drawText(0, -60, text.toUpperCase(), 'center')
    .toBuffer(imageType,function (err, buffer) {
      if (err) return handle(err);
      s3.putObject({
        Body: buffer,
        Bucket: dstBucket,
        ContentType: buffer.ContentType,
        Key: dstKey,
      }).promise()
        .then(() => callback(null, {
            statusCode: 200,
            body: JSON.stringify({
              url: dstKey
            })
          })
        )
        .catch(err => callback(err))
      // console.log('done!');
    })
  )