NodeJs 失败:预期 params.Body 为字符串、Buffer、Stream、Blob 或类型化数组对象

mis*_*sha 6 amazon-s3 node.js graphicsmagick

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

失败:预期 params.Body 为字符串、Buffer、Stream、Blob 或类型化数组对象

这是我的代码:

 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))
Run Code Online (Sandbox Code Playgroud)

Mig*_*rón 4

我认为你只能从 中提供的回调中获取缓冲区toBuffercallback我假设您在代码中定义了一些函数:

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!');
    })
  )
Run Code Online (Sandbox Code Playgroud)