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

mic*_*lik 5 amazon-s3 node.js aws-sdk aws-sdk-nodejs

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

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

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

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

mic*_*lik 18

看来ReadableStream | Blob只能在浏览器中使用。Node.js 总是能得到Readable我需要的东西。

之后的解决方案非常简单,通过fs.createWriteStream管道传输,Readable例如

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

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