AWS S3指定etag值

时间:2017-05-01 18:22:09

标签: amazon-web-services amazon-s3

我想使用我的对象的sha256总和作为etag。我使用以下代码尝试指定etag:

aws s3 cp foo-lambda.zip s3://foo-bucket/lambda-code/foo-lambda/foo-lambda.zip --metadata ETag=FkyOB6C4wZQz5w9ClCMKxnK8A0iqCk4RWSO0Epbbc4I= --profile foo-profile

此操作成功,没有错误消息或警告。但是,AWS S3控制台中的etag与此值不匹配;它取而代之的是拉链的MD5总和。我尝试删除该对象并再次上传,但结果相同。

编辑:这是来自命令行的更多信息

aws s3api head-object --bucket foo-bucket --key lambda-code/foo-lambda/foo-lambda.zip --profile foo-profile

响应

{
    "AcceptRanges": "bytes",
    "ContentType": "application/zip",
    "LastModified": "Mon, 01 May 2017 18:17:11 GMT",
    "ContentLength": 584,
    "ETag": "\"729439461018d55c885e56b858e54676\"",
    "Metadata": {
        "etag": "FkyOB6C4wZQz5w9ClCMKxnK8A0iqCk4RWSO0Epbbc4I="
    }
}

请注意,ETag值是错误的,但Metadata.etag值是我想要的值。

1 个答案:

答案 0 :(得分:1)

亚马逊将etag用于系统中的各种任务。您将不得不继续使用您在问题中提出的元数据。

  

的ETag
  实体标签是对象的哈希。 ETag仅反映对象内容的更改,而不反映其元数据。 ETag可能是也可能不是对象数据的MD5摘要。它是否取决于对象的创建方式以及如何加密,如下所述:

     
      
  • 由PUT对象,POST对象或复制操作创建的对象,或通过AWS管理控制台创建的对象,并由SSE-S3或纯文本加密,其ETag是 MD5摘要对象数据。
  •   
  • 由PUT对象,POST对象或复制操作或通过AWS管理控制台创建并由SSE-C或SSE-KMS加密的对象具有不是MD5摘要的ETag 他们的对象数据。
  •   
  • 如果通过分段上传或零件复制操作创建对象, ETag不是MD5摘要,无论加密方法如何。
  •   

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonResponseHeaders.html