【发布时间】:2022-05-06 19:08:02
【问题描述】:
我有一个 scala 项目,我尝试实施一项需要访问 Amazon S3 存储桶的服务。
我想得到一个桶中所有对象的列表,但是s3Client.listObjects的结果集被分页到了1000个项目。
必须获取多个 objectListings 才能获得所有结果。
我找到了一个example Java implementation,但它依赖于可变性(在 while 循环中覆盖 objectListing):
AmazonS3 s3Client = AmazonS3Provider.getS3Client();
ListObjectsRequest req = new ListObjectsRequest().withBucketName(realBucket).withPrefix(!preprefix.equals("") ? preprefix + "/" + prefix : prefix);
ObjectListing objectListing = s3Client.listObjects(req);
List<S3ObjectSummary> summaries = objectListing.getObjectSummaries();
while (objectListing.isTruncated()) {
objectListing = s3Client.listNextBatchOfObjects(objectListing);
summaries.addAll(objectListing.getObjectSummaries());
}
虽然我可以将其翻译成 scala 很好,但我想使用更惯用的 scala 方式。
如何使用 scala 获取存储桶的所有页面?
【问题讨论】:
-
你可以试试Benji S3(由我工作的公司),它更符合 Scala 习惯(DSL,基于 akka 流)