我正在尝试使用 Amazon S3 Java API 实现移动操作。
我遇到的问题是CopyObjectResult
该方法返回的对象AmazonS3Client.copyObject
似乎没有明确指示操作是否成功。
鉴于在此操作之后我将删除一个文件,我想确保操作成功。
有什么建议么?
我正在尝试使用 Amazon S3 Java API 实现移动操作。
我遇到的问题是CopyObjectResult
该方法返回的对象AmazonS3Client.copyObject
似乎没有明确指示操作是否成功。
鉴于在此操作之后我将删除一个文件,我想确保操作成功。
有什么建议么?
这就是我最终做的,
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 方法来确认,在创建之后,它具有有效的 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 做了类似的功能已经一年了,但它应该可以工作。