【问题标题】:AWS S3 specify etag valueAWS S3 指定 etag 值
【发布时间】:2017-05-02 02:44:36
【问题描述】:

我想使用对象的 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 与此值不匹配;相反,它是 zip 的 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 的值是我想要的。

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多