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))
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!');
})
)