How to resize image from S3 with Sharp?

Viewed 1403

I am trying to resize the uploaded image from S3 using @aws-sdk/v3 in Node.js API.

First, I get the object (image) from S3 as shown here: https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javascriptv3/example_code/s3/src/s3_getobject.ts

...

  const params = { Bucket: AWS_BUCKET_NAME, Key: key }
  const data = await s3.send(new GetObjectCommand(params))
  console.log(` >> Success, bucket returned:`, data) // Log correctly

Then I try to resize the data (image):

  const convert = sharp(data).resize(size, size).webp()

But it throws:

 >> data.type: object
(node:35583) UnhandledPromiseRejectionWarning: Error: Input file is missing
...

And I am not sure how should I upload it back?

What am I doing wrong?

1 Answers

I think the sharp constructor accepts a buffer, but what you're passing it is the entire response from the SDK request. Instead, try passing data.Body to sharp fn like this:

const convert = sharp(data.Body).resize(size, size).webp();

Related