我有一个S3-Bucket,有两个文件:
s3://bucketA/objectA/objectB/fileA
s3://bucketA/objectA/objectB/fileB
我想使用java中的s3Client
创建objectA
的副本称为objectC
,使用s3Client
的copyObject
方法。
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