如何使用 aws-sdk v3 从 S3 保存文件 [英] How to save file from S3 using aws-sdk v3

查看:35
本文介绍了如何使用 aws-sdk v3 从 S3 保存文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

With the new aws-sdk v3, specifically @aws-sdk/client-s3, it's not clear to me how to store files to disk from S3.
Having the following code

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

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

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

In aws-sdk v2 it was easy with .createReadStream() function which seems to no longer exist.

推荐答案

出现ReadableStream |博客 仅在浏览器中可用.Node.js 总是获得 Readable 这正是我所需要的.

It appears ReadableStream | Blog is available only in browser. Node.js always gets Readable which is what I need.

使用 fs.createWriteStream 和管道 Readable 之后的解决方案非常简单,例如

The solution is pretty straightforward afterwards with fs.createWriteStream and piping the Readable such as

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

For reference, here's an issue where improvement to documentation is discussed https://github.com/aws/aws-sdk-js-v3/issues/1877

这篇关于如何使用 aws-sdk v3 从 S3 保存文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆