Node.js Lambda中使用AWS-SDK V3上传S3文件时遇Bucket参数缺失错误
问题原因与解决方案
核心问题1:PutObjectCommand参数传递错误
你在创建PutObjectCommand时错误地将params包裹在了一个对象里,导致SDK无法识别Bucket等必填字段。正确的做法是直接传入params对象,而非嵌套在{ params }中。
核心问题2:异步操作未被正确捕获
你使用了立即执行的异步函数,但未用await等待其完成,这会导致异步操作的错误无法被外层catch块捕获,错误信息可能无法正常输出。
修正后的代码
const BUCKET_NAME = BILLING_BUCKET_ROOT; const BUCKET_STORAGE_PATH = <FILE_PATH> + fileName; // Setting up S3 upload parameters const params = { Bucket: BUCKET_NAME, Key: BUCKET_STORAGE_PATH, // File name you want to save as in S3 Body: file }; const s3Client = new S3Client({ region: process.env.REGION, // forcePathStyle: true, // endpoint: 'http://localhost:4566' }); // 改为async函数统一处理异步逻辑 const uploadToS3 = async () => { try { await s3Client.send(new PutObjectCommand(params)); console.log(`${BUCKET_STORAGE_PATH} uploaded successfully.`); } catch (e) { console.log(e); } }; uploadToS3();
额外验证点
- 确认
file是有效的Buffer、TypedArray、Blob、字符串或可读流,S3的PutObject API对Body格式有明确要求。 - 再次确认
BILLING_BUCKET_ROOT和process.env.REGION的类型为字符串,避免出现隐式类型转换问题。
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

