You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:42:38