【发布时间】:2023-04-05 11:25:01
【问题描述】:
我正在尝试使用 Amazon S3 Java API 实现移动操作。
我遇到的问题是AmazonS3Client.copyObject 方法返回的CopyObjectResult 对象似乎没有明确指示操作是否成功。
鉴于在此操作之后我将删除一个文件,我想确保操作成功。
有什么建议吗?
【问题讨论】:
-
你有理由相信方法可以失败而不抛出异常吗?
我正在尝试使用 Amazon S3 Java API 实现移动操作。
我遇到的问题是AmazonS3Client.copyObject 方法返回的CopyObjectResult 对象似乎没有明确指示操作是否成功。
鉴于在此操作之后我将删除一个文件,我想确保操作成功。
有什么建议吗?
【问题讨论】:
这就是我最终做的,
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 代码的工作方式极为相似。
我不喜欢进行两次额外的操作来检查元数据,所以如果有更有效的方法,请告诉我。
【讨论】:
我很确定您可以使用 CopyObjectResult 对象的 getETag method 来确认它在创建后具有有效的 ETag,就像在 CopyObjectRequest setETag 方法中所做的那样。
获取ETag
public String getETag()获取新对象的 ETag 值 在关联的 CopyObjectRequest 中创建。返回:ETag 新对象的值。另见:setETag(String) setETag
public void setETag(String etag)设置新的 ETag 值 从关联的复制对象请求创建的对象。 参数: etag - 新对象的 ETag 值。也可以看看: getETag()
始终相信数据。
几年前我使用 Amazon PhP SDK 执行类似功能已有一年了,但它应该可以工作。
【讨论】: