我目前通过附加包含md5哈希的元数据标签来标记s3中的对象。当我上传对象时,我检查md5哈希是不同的,然后我将对象推入s3。
我想知道是否有办法获取s3存储桶中所有对象的元数据,因为它似乎需要一些时间来为每个项目单独获取它们。
我使用以下内容从s3中获取哈希值
$hash = Get-S3ObjectMetadata -Credential $AwsCredentials -BucketName $Bucketname -Key $key
当我删除-Key值时,我得到以下错误
Get-S3ObjectMetadata : Key is a required property and must be set before making this call.
我也尝试了get-help -full并在-key上获得了以下信息
-Key <System.String>
The key of the object.
Required? false
Position? 2
Default value None
Accept pipeline input? True (ByPropertyName)
Accept wildcard characters? false
这似乎与我得到的错误相矛盾
获取对象元数据没有批处理模式。您必须单独获取每个对象的元数据。通常的方法是使用多个进程或线程来发送并行请求。一个桶应该能够以几百reqs / sec的速率处理这样的请求而没有任何问题。
您的解决方案存在缺陷,因为它无法扩展。我看到的一个解决方案是将对象密钥实际设置为对象有效负载的散列(sha256是更好的选择,因为md5和sha1都存在已知的冲突),这提供了基本上自动的重复数据删除。
除非您使用的是SSE-C
或SSE-KMS
,否则etag是对象主体的md5sum或各个部分的二进制(非十六进制)md5sum的md5sum,其次是-
和部件数量,当使用multipart上传对象时上传API。