NodeJs失败:预期的params.Body是一个字符串,Buffer,Stream,Blob或类型化数组对象

时间:2018-02-12 12:33:46

标签: node.js amazon-s3 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))

1 个答案:

答案 0 :(得分:1)

我认为你只能通过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!');
    })
  )