如何使用 aws-sdk v3 从 S3 保存文件 [英] How to save file from S3 using aws-sdk v3
问题描述
使用新的 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 获取 Buffer
或 Stream.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屋!