6

I am using GraphicsMagic to modify image. After drawing text on image I need to upload result image to s3 bucket. However I suspect toBuffer() is returning empty result because I am getting following error:

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

Here is my code:

 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))
misha
  • 191
  • 1
  • 4
  • 15

1 Answers1

4

I think you can only get the buffer from the callback provided in toBuffer. I assume you have some function defined as callback in your code:

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!');
    })
  )
Miguel Calderón
  • 3,001
  • 1
  • 16
  • 18