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

如何获取指定数量的S3最新修改对象?

解决S3批量获取所有对象并排序的问题

首先,ListObjectsV2本身支持分页遍历所有对象,你当前只调用了一次接口,所以仅拿到第一页的100个结果。要获取全部对象,需要利用返回结果里的NextContinuationToken循环请求,直到没有这个字段为止。之后可以在本地对所有对象进行自定义排序。

实现步骤

  • 循环调用ListObjectsV2Command,每次用上一次返回的NextContinuationToken作为下一次请求的参数
  • 将所有返回的对象收集到一个数组中
  • 对收集到的对象数组按需求排序(比如按最后修改时间、对象键等)

修改后的代码示例

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

const client = new S3Client({ region: "us-east-1" });
const bucketName = "mybucket";

async function getAllS3Objects() {
  const allObjects = [];
  let continuationToken = null;

  do {
    const input = {
      Bucket: bucketName,
      MaxKeys: 1000, // 用最大限制减少请求次数
      ContinuationToken: continuationToken
    };

    const command = new ListObjectsV2Command(input);
    const response = await client.send(command);

    // 收集当前页的对象
    if (response.Contents) {
      allObjects.push(...response.Contents);
    }

    // 更新续传token,用于下一次请求
    continuationToken = response.NextContinuationToken;
  } while (continuationToken); // 直到没有更多结果

  return allObjects;
}

async function fetchAndSortImages() {
  console.log("Fetching all images from S3...");
  const allObjects = await getAllS3Objects();
  console.log(`Total objects fetched: ${allObjects.length}`);

  // 按最后修改时间降序排序(最新的在前)
  const sortedByLastModified = allObjects.sort((a, b) => {
    return new Date(b.LastModified) - new Date(a.LastModified);
  });

  // 或者按对象键排序(默认S3返回顺序为键的UTF-8顺序,可自定义规则)
  const sortedByKey = allObjects.sort((a, b) => {
    return a.Key.localeCompare(b.Key);
  });

  // 这里可以使用排序后的结果
  console.log("Sorted objects (by last modified):", sortedByLastModified);
}

fetchAndSortImages().catch(err => console.error("Error:", err));

关键说明

  • 分页遍历:通过ContinuationToken循环请求,确保拿到所有对象,不受数量限制
  • MaxKeys优化:设为1000可以减少请求次数,提升遍历效率
  • 本地排序:S3仅支持按对象键排序返回,若需要其他排序规则(如修改时间),必须在获取全部对象后在本地处理

内容的提问来源于stack exchange,提问作者Gap

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:52:34