【问题标题】:Is there a way to download objects from Amazon S3 based on certain tags?有没有办法根据某些标签从 Amazon S3 下载对象?
【发布时间】:2015-02-25 08:09:10
【问题描述】:

我正在尝试从 Amazon-S3 下载对象(文件),但我面临的问题是跟踪哪些对象已下载,因为我在每个存储桶中有大量对象,而且它们每天都在增加。

我一直在寻找一种方法,以便我可以set/unset 一些与每个对象关联的标签。因此,当我必须下载时,我可以查找所有未设置特定标签的对象,下载它们,然后设置它们的标签,以便下次再次下载它们。有没有办法这样做?这样做的示例将有所帮助。

我正在使用boto 通过python 下载对象。我当前的代码基本上下载了我必须命名的单个对象。

from boto.s3.connection import S3Connection

conn = S3Connection( S3 Credentials )
bucket = conn.get_bucket (Bucket Name)
key = bucket.get_key(Object Name)
key.get_contents_to_filename(Local Object Path to Download)

更新代码: 我正在尝试使用 boto's copy() 函数将文件从一个目录复制到同一存储桶中的另一个目录。这是我当前的代码:

    conn = S3Connection( S3 Credentials )
    bucket = conn.get_bucket (Bucket Name)
    key = bucket.get_key(Object Name)
    key2= bucket.get_key(/new/dir/in_same_bucket/)
    key.get_contents_to_filename(Local Object Path to Download)
    key.copy(bucket.name, key2.name,metadata=None, preserve_acl=True)

当我这样做时,我得到AttributeError: 'NoneType' object has no attribute 'name' 的错误。如何使用copy() 将文件从一个目录复制到同一存储桶中的另一个目录?

【问题讨论】:

    标签: python amazon-s3 boto


    【解决方案1】:

    您可以在上传对象时将任意元数据附加到 S3 对象,以便在最初上传文件时设置标签。但是还有两个问题需要克服:

    • 取消设置标签。 S3 不提供在创建对象后修改对象元数据的方法。但是,它确实为您提供了一种将对象复制回自身(所有服务器端)并修改元数据的方法。因此,它很笨重,但您可以在处理完对象后取消设置标签。
    • 查询标签。这是真正的问题。无法获取元数据包含(或不包含)某个值的所有对象的列表。您必须不断列出存储桶中的所有对象才能找到具有您的标签的对象。而且,更糟糕的是,标签不会在存储桶列表中返回。您必须对每个对象执行 HEAD 请求才能检索其标签。

    如果可以根据LastModifiedDate 找到所有需要下载的对象,则您可能会使用它。您仍然需要列出所有对象,但最后修改日期会在存储桶列表数据中返回,因此不需要 HEAD 请求。

    或者,您可以使用prefix 对您的对象进行排序。您可以使用new/mynewobject 之类的名称将所有新对象上传到存储桶,然后获取具有prefix=new 的所有对象的列表。下载对象后,您可以使用 COPY 操作将对象“移出”新文件夹,这样您就不会再次对其进行处理。

    或者您可以使用像 DynamoDB 这样的数据库来帮助您跟踪事情。

    【讨论】:

    • 感谢您的回答。您能否通过一个示例详细说明LastModifiedDate 方法?还有一种方法可以重命名对象,例如在对象下载后我们可以在对象名称中添加某种前缀以使其显示为已下载?
    • 我对上面的代码做了一些修改。我试图将文件从一个目录复制(移动)到同一个存储桶中的另一个目录,但我收到了我在上面的帖子中提到的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 2022-01-07
    • 2011-09-10
    • 2020-04-30
    • 2012-11-07
    • 2020-08-22
    • 1970-01-01
    相关资源
    最近更新 更多