【发布时间】:2019-10-09 02:00:15
【问题描述】:
我正在尝试将大量文件(每个文件最大大小约为 300Kb)从 S3 文件夹移动到另一个文件夹。
我正在使用 AWS sdk for java,并尝试移动大约 1500 个文件。
时间太长,文件数可能会增加到10,000个。
对于文件的每个副本,由于无法移动文件,需要从源文件夹中删除。
这是我尝试过的:
public void moveFiles(String fromKey, String toKey) {
Stream<S3ObjectSummary> objectSummeriesStream = this.getObjectSummeries(fromKey);
objectSummeriesStream.forEach(file ->
{
this.s3Bean.copyObject(bucketName, file.getKey(), bucketName, toKey);
this.s3Bean.deleteObject(bucketName, file.getKey());
});
}
private Stream<S3ObjectSummary> getObjectSummeries(String key) {
// get the files that their prefix is "key" (can be consider as Folders).
ListObjectsRequest listObjectsRequest = new ListObjectsRequest().withBucketName(this.bucketName)
.withPrefix(key);
ObjectListing outFilesList = this.s3Bean.listObjects(listObjectsRequest);
return outFilesList.getObjectSummaries()
.stream()
.filter(x -> !x.getKey()
.equals(key));
}
【问题讨论】:
-
您是从 java 应用程序还是从 AWS-Lambda 运行此代码?
-
@alexey28 目前没有计划将此应用程序放在 Lambda 上。
-
这是一次性工作,还是会有更多需要移动的对象到达 Amazon S3?如果会有更多,Lambda 是有道理的。如果是一次性的,您可以使用AWS Command-Line Interface (CLI)
aws s3 mv命令。 -
@JohnRotenstein 这不是一次性的工作。这是日常过程。在这种情况下,Lambda 对我没有帮助,因为在我处理之前我无法将文件移动到另一个文件夹。我需要一起处理它们,它们不是独立的。
标签: java amazon-s3 aws-java-sdk