数据完整性检查是AWS Java SDK声称它默认提供的内容,客户端可以自己计算对象校验和,并在S3客户端中将其添加为标头"Headers.CONTENT_MD5",或者如果我们将其作为null传递或者不设置它,S3客户端在内部计算客户端本身的MD5校验和,它用它来比较从对象创建响应中获得的Etag((除了创建对象的MD5)以将错误返回到在数据完整性失败的情况下客户端.请注意,在这种情况下,完整性检查发生在客户端而不是S3服务器端,这意味着仍然会成功创建对象,客户端需要清理它明确.
因此,建议使用标头(检查发生在S3端本身并提前失败)但由于TransferManager使用部件上载,客户端无法为特定部件显式设置MD5.传输管理器应该负责计算部件的MD5并设置标头,但我不会在代码中看到这种情况.
由于我们希望使用Transfer Manager进行多部分上传,因此我们需要依赖于默认情况下启用的客户端检查.但是,也有一个警告.当我们在S3中的对象上启用SSE-KMS或SSE-C时,将跳过此数据完整性检查(正如它们在代码中的一个注释中所提到的那样),在这种情况下,接收到密文的MD5来自S3,无法通过在客户端计算的MD5进行验证.
我应该使用什么来启用S3中的SSE进行数据完整性检查?
注意:请验证上述理解是否正确.