S3 ListObjectsV2 api 调用未返回内容
S3 ListObjectsV2 api call not returning contents
根据 ListObjectsV2 - Amazon Simple Storage Service 文档,当我指定一个 Prefix
和一个 Delimiter
时,我应该在响应中得到一个内容元素,前缀是一个 ETag。
<Contents>
<Key>photos/2006/</Key>
<LastModified>2016-04-30T23:51:29.000Z</LastModified>
<ETag>"d41d8cd98f00b204e9800998ecf8427e"</ETag>
<Size>0</Size>
<StorageClass>STANDARD</StorageClass>
</Contents>
我已经尝试 运行 使用 python sdk (boto3)。
client.list_objects_v2(Bucket='bucketname', Prefix = "folder1-folder2-", Delimiter = "-")
但是在响应指令中,我没有找到内容键。根据示例中的响应,所有其他字段都存在。
dict_keys(['ResponseMetadata', 'IsTruncated', 'Name', 'Prefix', 'Delimiter', 'MaxKeys', 'CommonPrefixes', 'EncodingType', 'KeyCount'])
这是否不再包含在 API 调用的响应中。或者这是 SDK 确实显示的内容。
还有一个后续问题,如果它是 sdk 方面的东西,我如何在这个字段中 api 调用 returns 我。
当提供 Prefix
和 Delimiter
时,Prefix
中的目录在 CommonPrefixes
中 return。
因此,如果有一个名为 folder1-folder2-folder3-file.txt
的对象,那么您的 return 响应应该包含一个 CommonPrefixes
列表,其中包括 folder3-
.
由于您使用的是 boto3,因此查看 list_objects_v2()
的 boto3 文档会更容易。它显示了如何在响应中提供字段。
您可以像这样访问值:
response = s3_client.list_objects_v2(Bucket='bucketname', Prefix = "folder1-folder2-", Delimiter = "-")
# Objects
for object in response['Contents']:
print(object['Key'])
# Folders
for folder in response['CommonPrefixes']:
print(folder['Prefix'])
当用户在 Amazon S3 管理控制台中单击 创建文件夹 时,它会创建一个与 'folder' 同名的 zero-length 对象。这是因为 Amazon S3 实际上并不使用文件夹,但它可以通过 Delimiter
和 CommonPrefixes
来模拟它们。通过创建 zero-length 对象,它会强制该文件夹名称显示为 CommonPrefix
。它还会导致 zero-length 对象本身在 list_objects()
API 调用中显示为一个对象。
根据 ListObjectsV2 - Amazon Simple Storage Service 文档,当我指定一个 Prefix
和一个 Delimiter
时,我应该在响应中得到一个内容元素,前缀是一个 ETag。
<Contents>
<Key>photos/2006/</Key>
<LastModified>2016-04-30T23:51:29.000Z</LastModified>
<ETag>"d41d8cd98f00b204e9800998ecf8427e"</ETag>
<Size>0</Size>
<StorageClass>STANDARD</StorageClass>
</Contents>
我已经尝试 运行 使用 python sdk (boto3)。
client.list_objects_v2(Bucket='bucketname', Prefix = "folder1-folder2-", Delimiter = "-")
但是在响应指令中,我没有找到内容键。根据示例中的响应,所有其他字段都存在。
dict_keys(['ResponseMetadata', 'IsTruncated', 'Name', 'Prefix', 'Delimiter', 'MaxKeys', 'CommonPrefixes', 'EncodingType', 'KeyCount'])
这是否不再包含在 API 调用的响应中。或者这是 SDK 确实显示的内容。 还有一个后续问题,如果它是 sdk 方面的东西,我如何在这个字段中 api 调用 returns 我。
当提供 Prefix
和 Delimiter
时,Prefix
中的目录在 CommonPrefixes
中 return。
因此,如果有一个名为 folder1-folder2-folder3-file.txt
的对象,那么您的 return 响应应该包含一个 CommonPrefixes
列表,其中包括 folder3-
.
由于您使用的是 boto3,因此查看 list_objects_v2()
的 boto3 文档会更容易。它显示了如何在响应中提供字段。
您可以像这样访问值:
response = s3_client.list_objects_v2(Bucket='bucketname', Prefix = "folder1-folder2-", Delimiter = "-")
# Objects
for object in response['Contents']:
print(object['Key'])
# Folders
for folder in response['CommonPrefixes']:
print(folder['Prefix'])
当用户在 Amazon S3 管理控制台中单击 创建文件夹 时,它会创建一个与 'folder' 同名的 zero-length 对象。这是因为 Amazon S3 实际上并不使用文件夹,但它可以通过 Delimiter
和 CommonPrefixes
来模拟它们。通过创建 zero-length 对象,它会强制该文件夹名称显示为 CommonPrefix
。它还会导致 zero-length 对象本身在 list_objects()
API 调用中显示为一个对象。