AWS S3 Java SDK提供了一种方法doesObjectExist()
来检查S3中是否存在对象。它在内部使用什么操作?是GET
,LIST
还是HEAD
?
我的担心主要与其成本有关。从S3文件中,美国西俄勒冈州的费用是 - PUT,COPY,POST或LIST请求每1,000个请求$ 0.005
获取,选择和所有其他请求每1,000个请求0.0004美元
doesObjectExist()
的费用是否属于第1类或第2类?此外,我正在阅读此操作需要ListBucket
和GetObject
权限的地方。那么这是否意味着此操作会产生上述两种类别的成本?
答案 0 :(得分:2)
查看代码时,doesObjectExist()
方法会在内部调用getObjectMetadata
(link,link)。
如果你将a little deeper转到代码中,实际的HTTP请求就是HEAD
请求,所以我强烈怀疑他们只是在对象本身上做HEAD
。
GetObjectMetadataRequest
和HEAD
call on the REST API的说明也类似。
关于权限,你是对的(下面的摘录也来自REST API上的HEAD
请求:
您需要s3:GetObject权限才能执行此操作。有关更多信息,请转到Amazon Simple Storage Service开发人员指南中的在策略中指定权限。如果您请求的对象不存在,则Amazon S3返回的错误取决于您是否还具有s3:ListBucket权限。