如何使用 aws-sdk v3 从 S3 保存文件

How to save file from S3 using aws-sdk v3

使用新的 aws-sdk v3,特别是 @aws-sdk/client-s3,我不清楚如何将文件从 S3 存储到磁盘。
有以下代码

const { Body } = await s3.send(new GetObjectCommand({
  Bucket: 'myBucket',
  Key: 'myKey',
}))

Body 可以是 Readable | ReadableStream | Blob 类型。
我想将其存储到磁盘上的文件中。由于 return 类型完全不同,是否有一种简单的方法,例如从 aws-sdk 获取 BufferStream.Readable?

在 aws-sdk v2 中,使用 .createReadStream() 功能很容易,但似乎不再存在。

看来 ReadableStream | Blobavailable only in browser。 Node.js 总是得到 Readable 这正是我需要的。

之后的解决方案非常简单 fs.createWriteStream 并管道 Readable 例如

await new Promise((resolve, reject) => {
  Body.pipe(fs.createWriteStream(filePath))
    .on('error', err => reject(err))
    .on('close', () => resolve())
})

作为参考,这里有一个讨论改进文档的问题https://github.com/aws/aws-sdk-js-v3/issues/1877

要在打字稿中做到这一点,您也可以这样做

await new Promise((resolve, reject) => {
 if (Body instanceof Readable) {
   Body.pipe(fs.createWriteStream(filePath))
    .on('error', err => reject(err))
    .on('close', () => resolve())
 }
});