使用@aws-sdk/client-s3 v3.481.0时ListBucketsCommand类型不匹配报错求助
问题解决:@aws-sdk/client-s3 send方法类型错误
错误核心原因
- 命令参数混淆:
ListBucketsCommand用于列出当前AWS账号下所有S3存储桶,它不需要Bucket和MaxKeys参数——你把它和用于列出指定存储桶内对象的ListObjectsV2Command搞混了。 - 类型不兼容触发:错误提示的类型不匹配问题,本质是传递了错误的参数给
ListBucketsCommand,导致命令实例不符合send方法的参数要求。
修正后的代码
先确保正确导入所需模块:
import { S3Client, ListBucketsCommand, ListObjectsV2Command } from "@aws-sdk/client-s3";
场景1:列出所有存储桶
const S3_Config = { region: process.env.S3_REGION, credentials: { accessKeyId: process.env.S3_ACCESS_KEY_ID, secretAccessKey: process.env.S3_ACCESS_SECRET_KEY, }, }; const s3_client = new S3Client(S3_Config); // ListBucketsCommand 无需额外参数 const _command = new ListBucketsCommand({}); const response = await s3_client.send(_command); console.log(response.Buckets);
场景2:列出指定存储桶内的对象
改用ListObjectsV2Command实现你的需求:
const S3_Config = { region: process.env.S3_REGION, credentials: { accessKeyId: process.env.S3_ACCESS_KEY_ID, secretAccessKey: process.env.S3_ACCESS_SECRET_KEY, }, }; const s3_client = new S3Client(S3_Config); const s3_params = { Bucket: process.env.S3_BUCKET_NAME, // 必填 MaxKeys: 20, }; const _command = new ListObjectsV2Command(s3_params); const response = await s3_client.send(_command); console.log(response.Contents);
额外验证项
- 确认
package.json中@aws-sdk/client-s3版本确实为^3.481.0,可执行npm list @aws-sdk/client-s3验证。 - 检查环境变量
S3_REGION、S3_ACCESS_KEY_ID等是否配置正确,无空值。
内容的提问来源于stack exchange,提问作者Rafat Sarosh
相关产品推荐
相关产品推荐

