以编程方式列出对象键 - Amazon Simple Storage Service

以编程方式列出对象键

在 Amazon S3 中,键可以按前缀列出。您可以为相关键的名称选择通用前缀,然后使用分隔层次结构的特殊字符标记这些键。然后,您可以使用列表操作按层次选择和浏览键。这类似于在文件系统的目录中存储文件的方式。

Amazon S3 公开了列表操作,允许您列出包含在存储桶中的键。将按存储桶和前缀选择用于列表的键。例如,假设一个存储桶的名称为“dictionary”,它为每个英语词汇包含了一个键值。您可能会创建一个调用来列出该存储桶中以字母“q”开头的存储桶。列表结果始终以 UTF-8 二进制顺序返回。

SOAP 和 REST 列表操作将返回一个 XML 文档,其中包含匹配键值的名称和有关由每个键值识别的对象的信息。

注意

HTTP 上的 SOAP 支持已弃用,但 SOAP 仍可在 HTTPS 上使用。SOAP 不支持新增的 Amazon S3 特征。我们建议您使用 REST API 或 AWS SDK,而不是使用 SOAP。

出于列表目的,可以根据通用前缀收拢那些共享一个前缀并且以特定分隔符终结的键组。这允许应用程序按层次结构组织和浏览键值,与您在文件系统的目录中组织文件的方式相同。

例如,要扩展字典存储桶以包含除英语单词外的更多内容,您可以使用语言和分隔符为每个单词添加前缀(例如,“French/logical”),从而构成键值。使用此命名方案和层级列表特征,您可以检索仅包含法语词汇的列表。您也可以浏览可用语言的顶级列表,而无需循环浏览所有按字典顺序排列的干预键。有关列表的此方面的更多信息,请参阅 使用前缀组织对象

REST API

如果您的应用程序需要它,则可以直接发送 REST 请求。您可以发送 GET 请求来返回存储桶中的某些或所有对象,或者您也可以使用选择条件来返回存储桶中对象的子集。有关更多信息,请参阅《Amazon Simple Storage Service API 参考》中的 GET Bucket (List Objects) 版本 2

列表执行效率

存储桶中的密钥总数不会对列表性能产生重大影响。它也不因是否存在 prefixmarkermaxkeysdelimiter 参数而受到影响。

循环访问多页结果

由于存储桶可以包含几乎无限数量的键,列表查询的完整结果可能会非常大。为了管理大型结果集,Amazon S3 API 支持分页,以将它们分割为多个响应。每个列出键响应将返回一个拥有多达 1000 个键的页面,同时使用指示器来指示响应是否存在截断。您可以发送一系列的列出键请求,直到您收到了所有的键。AWSSDK 包装库提供相同的分页。

示例

以下代码示例显示如何使用 ListObjects

CLI
AWS CLI

以下示例使用 list-objects 命令显示指定存储桶中所有对象的名称:

aws s3api list-objects --bucket text-content --query 'Contents[].{Key: Key, Size: Size}'

该示例使用 --query 参数筛选 list-objects 的输出,使其范围缩小到每个对象的键值和大小

有关对象的更多信息,请参阅《Amazon S3 开发人员指南》中的“使用 Amazon S3 对象”。

  • 有关 API 详细信息,请参阅《AWS CLI 命令参考》中的 ListObjects

PowerShell
适用于 PowerShell 的工具

示例 1:此命令检索有关存储桶“test-files”中所有项目的信息。

Get-S3Object -BucketName test-files

示例 2:此命令从存储桶“test-files”中检索有关项目“sample.txt”的信息。

Get-S3Object -BucketName test-files -Key sample.txt

示例 3:此命令从存储桶“test-files”中检索有关前缀为“sample”的所有项目的信息。

Get-S3Object -BucketName test-files -KeyPrefix sample
  • 有关 API 详细信息,请参阅《AWS Tools for PowerShell Cmdlet 参考》中的 ListObjects