如何使用Sharp从S3调整图像大小?

6

我正在尝试使用@aws-sdk/v3在Node.js API中调整大小来自S3的上传图像。

首先,按照以下方式从S3获取对象(图像):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

然后我尝试调整数据(图像)的大小:

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

但是它会抛出以下错误:

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

我不确定应该如何将其上传回去?

我做错了什么?

2个回答

2
我认为sharp构造函数接受一个缓冲区,但你传递给它的是SDK请求的整个响应。相反,尝试像这样将data.Body传递到sharp fn中:const convert = sharp(data.Body).resize(size, size).webp();

0

data.Body 是一个 Readable 类型的对象 (可读流)

你可以直接使用可读流与 sharp 进行操作 (在 sharp 的 readme 中查看可读流示例)

在你的情况下,这样做会得到:

  const params = { Bucket: AWS_BUCKET_NAME, Key: key }
  const data = await s3.send(new GetObjectCommand(params))

  const converter = await sharp().resize(size, size).webp()
  const resizedBody = (data.Body as Readable).pipe(converter);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接