我想使用我的对象的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
值是我想要的值。
答案 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