使用 s3Client.copyObject 方法复制具有"subdirectories"的 S3 对象



我有一个S3-Bucket,有两个文件:

s3://bucketA/objectA/objectB/fileA
s3://bucketA/objectA/objectB/fileB

我想使用java中的s3Client创建objectA的副本称为objectC,使用s3ClientcopyObject方法。

s3://bucketA/objectA/ ---Copy-To---> s3://bucketA/objectC/

问题是objectA的内容没有被复制到objectC。对象C不包含对象B、fileA和fileB。我怎样才能复制对象的内容?

这是我的代码:(我使用kotlin)

s3client.copyObject(CopyObjectRequest("bucketA", "objectA","bucketA", "objectC"))

我检查了S3控制台,这是有效的(它创建了一个名为objectC的文件夹,但我无法将objectA的内容放入对象c)

正在发生的事情是,使用SDK,您没有使对象的recursive copy

所以最简单的解决方案是使用AWS CLI

aws s3 cp s3://source-awsexamplebucket s3://source-awsexamplebucket --recursive --storage-class STANDARD

请注意,你必须考虑到对象的大小,数量等。如果它太大,可以使用批处理机制来帮助您的系统处理负载。您可以在AWS文档中进一步阅读。

现在,假设您需要通过编程来完成。该算法分为列表+复制两部分。这样就可以了。

ListObjectsV2Result result = s3.listObjectsV2(from_bucket);
List<S3ObjectSummary> objects = result.getObjectSummaries();
for (S3ObjectSummary os : objects) {
s3.copyObject(from_bucket, os.getKey(), to_bucket, os.getKey());
}
// exception handling and error handling ommited for brevity

最新更新