检查S3复制操作是否成功?

时间:2013-07-10 21:53:28

标签: java amazon-s3

我正在尝试使用Amazon S3 Java API实现移动操作。

我遇到的问题是CopyObjectResult方法返回的AmazonS3Client.copyObject对象似乎没有关于操作是否成功的明确指示。

鉴于在此操作之后我将删除文件,我想确保操作成功。

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

这就是我最终要做的事情,

def s3 = createS3Client(credentials)
def originalMeta = s3.getObjectMetadata(originalBucketName, key)
s3.copyObject(originalBucketName, key, newBucketName, newKey)
def newMeta = s3.getObjectMetadata(newBucketName, newKey)

// check that md5 matches to confirm this operation was successful
return originalMeta.contentMD5 == newMeta.contentMD5

请注意,这是Groovy代码,但它与Java代码的工作方式非常相似。

我不想再进行两项额外的操作来检查元数据,所以如果有任何方法可以更有效地告诉我这一点。

答案 1 :(得分:1)

我很确定你可以使用CopyObjectResult对象的getETag method来确认它在创建后有一个有效的ETag,就像在CopyObjectRequest setETag方法中所做的那样。

  

getETag

     

public String getETag()获取新对象的ETag值   是在关联的CopyObjectRequest中创建的。返回:ETag   新对象的值。另请参见:setETag(String)setETag

     

public void setETag(String etag)   设置新的ETag值   从关联的副本对象请求创建的对象。   参数:etag - 新对象的ETag值。也可以看看:   getETag()

始终信任数据。

自从我几年前使用亚马逊PhP SDK做了类似的功能以来已经过去了一年,但它应该有用。

答案 2 :(得分:0)

AWS 文档说

<块引用>

成功复制的源和目标 ETag 相同

enter image description here