Boto的S3 Key对象包含last_modified日期(通过parse_ts很好地提供,感谢@Gaarnat!)但是base_field" date" (即ctime)似乎无法访问,即使它已在key.base_fields中列出。
根据http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html处的表格,它似乎总是自动创建(我无法想象它不会出现的原因)。它可能只是在对象属性中找到它的一个简单问题,但到目前为止我还没有找到它,尽管我确实找到了包含' date&#39的base_fields属性。 ;。 (他们只是一套,似乎没有可用的方法,我也无法找到有关检查方法的文件。)
例如,Amazon S3维护对象创建日期和大小元数据,并将此信息用作对象管理的一部分。
有趣的是,尽管last_modified可见,但create_time(系统元数据字段"日期"在上面的链接中)也未显示在AWS S3控制台中。
答案 0 :(得分:2)
经过进一步研究后,似乎从list()返回的S3密钥对象可能不包含此元数据字段!
迭代器返回的Key对象是通过解析存储桶上的GET结果获得的,也称为列表对象请求。 此请求返回的XML仅包含有关每个密钥的信息的子集。 XML中不提供某些元数据字段,如Content-Type和用户元数据。因此,如果您需要这些额外的元数据字段,则必须对存储桶中的密钥执行HEAD请求。 (docs)
换句话说,循环键:
for key in conn.get_bucket(bucket_name).list():
print key.date
... 不返回包含创建日期和其他一些系统元数据的完整密钥。 (例如,它也缺少ACL数据)。
相反,要检索完整的密钥元数据,请使用以下方法:
key = bucket.get_key(key.name)
print key.date
这需要额外的HTTP请求,因为文档明确说明了上述内容。(另请参阅my original issue report。)
其他代码详情:
import boto
# get connection
conn = boto.connect_s3()
# get first bucket
bucket = conn.get_all_buckets()[0]
# get first key in first bucket
key = list(bucket.list())[0]
# get create date if available
print getattr(key, "date", False)
# (False)
# access key via bucket.get_key instead:
k = bucket.get_key(key.name)
# check again for create_date
getattr(k, "date", False)
# 'Sat, 03 Jan 2015 22:08:13 GMT'
# Wait, that's the current UTC time..?
# Also print last_modified...
print k.last_modified
# 'Fri, 26 Apr 2013 02:41:30 GMT'
答案 1 :(得分:2)
回答旧问题,以防其他人遇到相同问题。
Amazon S3仅维护每个对象的最后修改日期。 例如,Amazon S3控制台在对象“属性”窗格中显示“上次修改日期”。最初创建新对象时,该日期反映了创建对象的日期。如果更换对象,则日期会相应更改。因此,当我们使用术语创建日期时,它与术语上次修改日期同义。
参考:https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html
答案 2 :(得分:0)
我建议使用
key.last_modified
,因为key.date
似乎在您上次查看文件时返回
像这样:
key = bucket.get_key(key.name)
print(key.last_modified)
答案 3 :(得分:0)
如果您为 S3 存储桶启用了版本控制,您可以使用 list_object_versions 并找到您要查找的对象的最小日期,该日期应该是它的创建日期