【问题标题】:How to save file from S3 using aws-sdk v3如何使用 aws-sdk v3 从 S3 保存文件
【发布时间】:2022-02-09 03:54:30
【问题描述】:

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

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

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

在 aws-sdk v2 中,使用似乎不再存在的 .createReadStream() 函数很容易。

【问题讨论】:

标签: node.js amazon-s3 aws-sdk aws-sdk-nodejs


【解决方案1】:

看来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

【讨论】:

    【解决方案2】:

    要在打字稿中执行此操作,您也可以这样做

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

    【讨论】:

      猜你喜欢
      • 2021-07-17
      • 2021-12-21
      • 1970-01-01
      • 2018-06-03
      • 2022-01-03
      • 2017-11-07
      • 2021-10-02
      • 2019-11-10
      • 2021-09-23
      相关资源
      最近更新 更多