存储桶对象 LastModified 日期和存储桶对象元数据 LastModified 日期有什么区别?

时间:2021-01-26 22:24:28

标签: python amazon-web-services amazon-s3 boto3

我正在访问存储桶对象以获取文件子集及其上次修改日期,以查看自上次将文件提取到我们的系统后是否有任何更新。我注意到我们访问修改日期的方式以及我认为应该如何完成存在差异,但我不知道哪个日期是正确的或每个日期实际代表什么。

我在下面创建了一个虚拟示例来说明我获取日期的两种方法以及它们的不同之处。第一个使用 list_objects_v2 并访问 data['Contents']['LastModified'] 中的值。第二种方法使用 head_object 并访问 data['Metadata']['last-modified'] 中的值。为了举例,假设它们都是同一个对象 foo/baz

import boto3

# Method 1 - using list_objects_v2
client = boto3.client('s3', region_name='us-west-2')
paginator = client.get_paginator('list_objects_v2')
operation_parameters = {'Bucket': 'my-bucket',
                        'Prefix': 'foo/baz'}
page_iterator = paginator.paginate(**operation_parameters)
filtered_iterator = page_iterator.search("Contents[?Size > `100`][]")
for key_data in filtered_iterator:
    print(key_data['LastModified'])
  • 这将返回一个类似 2020-03-01
  • 的日期
import boto3

# Method 2 - using head_object
client = boto3.client('s3', region_name='us-west-2')
obj_head = client.head_object(Bucket='my-bucket', Key='foo/baz')
print(obj_head['Metadata']['last-modified'])
  • 这将返回一个不同的日期,例如 2020-02-01
import boto3

# Bonus method 3 - using head_object BUT not using 'Metadata'
client = boto3.client('s3', region_name='us-west-2')
obj_head = client.head_object(Bucket='my-bucket', Key='foo/baz')
print(obj_head['LastModified'])
  • 这将返回与使用 list_objects_v2 的方法 1 相同的日期

产生差异的原因是什么?每个日期代表什么?访问对象上次修改的时间戳的正确方法是什么?

0 个答案:

没有答案