gpt4 book ai didi

javascript - s3.getObject(...).createReadStream 不是函数

转载 作者:行者123 更新时间:2023-12-05 01:28:25 27 4
gpt4 key购买 nike

我正在尝试使用我的 NodeJS 应用程序将文件从我的 s3 存储桶发送到客户端。这是我目前所拥有的:

import { S3 } from '@aws-sdk/client-s3';

const BUCKET_NAME = process.env.S3_BUCKET_NAME;

const s3 = new S3({
region: 'ap-southeast-2',
httpOptions: {
connectTimeout: 2 * 1000,
timeout: 60 * 1000,
},
});

router.get('/download/:id', async (req, res) => {
console.log('api: GET /download/:id');
console.log('req.params.id: ', req.params.id);
const result = await getRequiredInfo(req.params.id);
if (typeof result !== 'number') {
res.attachment(result.filename);
await s3
.getObject({
Bucket: BUCKET_NAME,
Key: result.location,
})
.createReadStream()
.pipe(res);
} else {
res.sendStatus(result);
}
});

当我运行这段代码时,我收到了:

(node:11224) UnhandledPromiseRejectionWarning: TypeError: s3.getObject(...).createReadStream is not a function

我想知道 SO,看起来其他人在结合使用 getObject 和 createReadStream 时工作正常。在这一点上我缺少什么吗?我应该如何在响应中将文件作为流发送?

最佳答案

.createReadStream() 是 aws-sdk v2 中的一个方法。 @aws-sdk/client-s3 是 aws-sdk v3 的一部分。

要从 v3 获取流,您需要执行以下操作:

const response = await s3.getObject({
Bucket: BUCKET_NAME,
Key: key,
});

response.Body.pipe(res);

有关 aws-sdk v3 的更多信息:https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/

关于javascript - s3.getObject(...).createReadStream 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68630542/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com