更新时间:2026-07-02 GMT+08:00
分享

列举对象

OBS管理控制台单击桶名称进入对象列表页,默认对象名按照字典序排序来列举对象。您也可以根据实际场景需求,按照“大小”和“最后修改时间”进行排序列举对象。

工作原理

在OBS列举桶内对象中,各参数(参数名以API为准)通过以下逻辑协同工作,以实现精准、可控的数据读取:

prefix用于界定检索范围,系统仅返回以该值开头的对象名,起到“划定选区”的作用。如图1所示,当prefix设置为“test/”时,列举结果则返回包含该前缀的对象test/a、test/b、test/c。

图1 列举条件为prefix的工作原理说明

其中marker负责设定读取起点,系统将从字典序大于该值的对象开始列举,从而实现断点续传。如图2所示,当marker设置为“test/b”时,列举结果则返回“test/b”后面的对象test/c、logs/2026。

图2 列举条件为marker的工作原理说明

关于目录展示方式,由delimiter分隔符(通常为 /)决定:

  • 未指定delimiter,系统将递归展开所有层级的子目录对象;
  • 若未指定prefix,只指定delimiter=/,从对象名的首字符到第一次出现/的对象名会被分成一组,形成一条CommonPrefixes,如图3所示;若指定prefix=t,delimiter=/,从对象名首字母t到第一次出现/字符串的对象名会被分成一组,形成一条CommonPrefixes,如图4
    图3 列举条件为只指定delimiter的工作原理说明
    图4 列举条件为指定prefix和delimiter的工作原理说明

此外max-keys作为硬性约束,限制单次请求返回的最大条目数(上限1000)。一旦结果超过此限制,响应将标记 IsTruncated=true,并通过 NextMarker告知下一次请求的起始位置,以此完成分页列举。如图5所示,当max-keys为2时,单次返回的列举结果为test/a、test/b。

图5 列举条件为max-keys的工作原理说明

如需深入了解各参数的详细定义、使用限制及响应示例,请参见使用SDK

权限控制

只有桶拥有者和被授予obs:bucket:ListBucket(未开启多版本)、obs:bucket:ListBucketVersions(开启或暂停多版本)权限的用户才能列举对象。您可以使用IAM或桶策略进行授权,授权操作请参见创建IAM自定义策略自定义创建桶策略

约束与限制

  • OBS不支持列举指定页数的对象。
  • OBS不支持通过时间排序找到某个时间上传的对象,只能通过按前缀搜索找到目标对象。
  • 对象列表页面的“大小”和“最后修改时间”仅对当前页面的对象进行排序。

使用方式

OBS支持通过控制台、API、SDK、obsutil方式列举对象,不支持使用OBS Browser+方式列举对象。

最佳实践

性能优化

  • 设置单页展示对象数量:在网络良好情况下桶内单页展示对象总数设为最大值(默认1000),可以减少请求往返次数并提升列举效率;同时需评估内存承载能力,防止因单次返回数据过多导致客户端内存异常。
  • 缓存目录结构:针对变更频率较低的对象,可缓存其列举结果,避免重复调用API,从而降低请求成本与延迟。

成本控制

若业务需定期执行全量对象盘点,强烈建议使用桶清单功能。相比实时列举,该功能成本更低且支持周期性输出,更适合进行全量分析与审计。

日志与监控

为帮助用户及时感知并处理列举对象操作,OBS提供了从实时感知到事后审计的完整管控能力。用户可以通过配置CTS追踪listObjects事件,或通过CES对列举桶内对象的行为进行监控(接口ID:LIST.BUCKET.OBJECTS),还可以开启REST.GET.BUCKET操作的桶日志功能,系统会记录该操作的详细日志,供用户审计或进一步分析。了解配置监控日志相关操作,请参见使用桶日志记录OBS日志信息

相关文档