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

如何通过一次调用向S3写入多个对象?

如何通过一次调用向S3批量写入对象

S3没有原生支持单次API调用写入多个独立对象的接口,但可以通过以下两种方式高效完成批量写入,实现近似"一次操作"的体验:

方案一:并发执行PutObject请求(中小批量推荐)

通过Promise.all并发发起多个PutObjectCommand请求,代码上只需一次调用即可完成所有对象的上传处理,示例代码如下:

const { PutObjectCommand, S3Client } = require("@aws-sdk/client-s3");

// 初始化S3客户端
const s3Client = new S3Client({
  region: process.env.AWS_REGION
});

// 待上传的对象数组,每个元素包含Key、Body、ContentType等必要参数
const objectsToUpload = [
  {
    Key: "photo1.jpg",
    Body: resizedImg1,
    ContentType: "image/jpeg"
  },
  {
    Key: "photo2.png",
    Body: resizedImg2,
    ContentType: "image/png"
  },
  // 更多待上传对象...
];

// 批量上传函数
async function batchUploadToS3(bucketName, uploadObjects) {
  // 生成所有PutObject命令
  const uploadCommands = uploadObjects.map(obj => {
    return new PutObjectCommand({
      Bucket: bucketName,
      ...obj
    });
  });

  // 并发执行所有上传请求,同时捕获错误避免批量失败
  const uploadResults = await Promise.all(
    uploadCommands.map(command => 
      s3Client.send(command).catch(error => ({ error, key: command.input.Key }))
    )
  );

  // 分离成功和失败的结果
  const successfulUploads = uploadResults.filter(res => !res.error);
  const failedUploads = uploadResults.filter(res => res.error);

  return { successfulUploads, failedUploads };
}

// 调用批量上传
batchUploadToS3(process.env.AWS_S3_PHOTO_BUCKET, objectsToUpload)
  .then(result => {
    console.log(`成功上传 ${result.successfulUploads.length} 个对象`);
    if (result.failedUploads.length > 0) {
      console.log(`上传失败的对象:`, result.failedUploads);
    }
  })
  .catch(globalError => console.error("批量上传全局错误:", globalError));

方案二:S3批量操作(超大量对象推荐)

如果需要上传的对象数量极多(比如上万级),可以使用S3官方的批量操作功能,步骤如下:

  • 整理待上传对象的信息为CSV格式清单文件(包含Key、数据源路径等),并将该清单上传到S3的某个存储桶中
  • 通过AWS控制台或API创建S3批量作业,指定作业类型为PutObject,并指向之前上传的清单文件
  • S3会自动批量处理所有对象,无需手动管理并发和请求限流

这种方式适合大规模批量场景,能有效避免手动并发请求可能遇到的限流问题。

内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:02:53