【问题标题】:How to get the checksum of a key/file on amazon using boto?如何使用 boto 在亚马逊上获取密钥/文件的校验和?
【发布时间】:2013-08-06 03:44:27
【问题描述】:

我正在编写两个 python 脚本,它们将在 Amazon S3 中将文件从一个存储桶移动到另一个存储桶,然后验证已移动的密钥的内容。在倾注了他们的关键类 boto 并查看了this stackoverflow 问题后,我发现了如何在文件复制后通过“etag”提取校验和。

但是,这仅在文件已被下载/上传时才有效,因为验证将由完全不同的脚本完成,我需要帮助从文件中获取 etag 而无需实际下载。

目前,工作流程是: 文件一通过存储桶并使用 boto 复制所有密钥,然后打印路径 的输出键,后跟它们的 etag。 (buckets[] 是源和目标)这很好用:

inbuck = conn.get_bucket(buckets[0])                                          
outbuck = conn.get_bucket(buckets[1])                                         
for inkey in inbuck.list():                                                   
    print buckets[1] + ";;" + inkey.key + ";;" + inkey.etag.replace("\"","")  
    out = Key(outbuck)                                                        
    out.key = inkey.key                                                       
    inkey.copy(outbuck,out.key,preserve_acl=True)                             

然后,文件二从文件一中读取输出,检查密钥是否存在,然后应该在目标中获取密钥的 etag 以与作为输入的内容进行比较。但是,密钥的 etag 始终为 None,因为它没有被下载。

dstbuck = conn.get_bucket(destination[0])
dstkey = Key(dstbuck)               
dstkey.key = destination[1]    

if dstkey.exists() and dstkey.etag.replace("\"","") == destination[2]:
    PASSED.append(dstkey.key)
else:
    FAILED.append(dstkey.key)

由于 dstkey.etag 为“无”,因此程序在此处崩溃。 有谁知道解决这个问题的方法吗?

【问题讨论】:

    标签: python amazon-web-services amazon-s3 checksum boto


    【解决方案1】:

    问题在于您只是在创建一个本地 Key 对象。没有从 S3 检索到有关密钥的信息。试试这样的:

    dstbuck = conn.get_bucket(destination[0])
    dstkey = bucket.get_key(destination[1])
    if dstkey is None:
        FAILED.append(destination[1])
    else:
        # do etag check here
    

    这样,Key 对象应该有来自 S3 的关于该对象的数据。 get_key 方法使用 HTTP HEAD 请求,因此不会检索对象的主体,只会检索标头。

    此外,如果存储桶名称(即目标 [0])对于程序的给定运行始终相同,则无需为存储桶中的每个关键对象执行 get_bucket。

    【讨论】:

      猜你喜欢
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 2010-12-19
      • 2015-07-22
      • 2015-05-20
      • 1970-01-01
      • 2016-06-01
      相关资源
      最近更新 更多