5

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

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

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

有什么建议么?

4

3 回答 3

5

这就是我最终做的,

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 代码的工作方式极为相似。

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

于 2013-07-11T14:59:34.790 回答
1

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

获取ETag

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

public void setETag(String etag) 为从关联的复制对象请求创建的新对象设置 ETag 值。参数: etag - 新对象的 ETag 值。另请参阅:getETag()

始终相信数据。

几年前我用 Amazon PhP SDK 做了类似的功能已经一年了,但它应该可以工作。

于 2013-07-10T22:01:42.593 回答
0

AWS 文档说

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

在此处输入图像描述

于 2021-01-07T01:51:06.667 回答