为了账号安全,请及时绑定邮箱和手机立即绑定

使用 sdk 计算 AWS S3 存储桶中的对象时计数不正确

使用 sdk 计算 AWS S3 存储桶中的对象时计数不正确

慕田峪7331174 2021-11-24 15:45:42
我正在AWS S3使用 Scala计算存储桶中的对象数量,如下所示:val reqAws:ListObjectsV2Request = new ListObjectsV2Request().withBucketName(awsBucketName).withPrefix(prefixForAws);var resultAws:ListObjectsV2Result = null;var totalFilesInAws:Int = 0;do {  resultAws = awsS3Client.listObjectsV2(reqAws);  val summariesForAws:java.util.List[S3ObjectSummary] = resultAws.getObjectSummaries()  totalFilesInAws = totalFilesInAws + summariesForAws.size().toInt  val token:String = resultAws.getNextContinuationToken();  reqAws.setContinuationToken(token);} while (resultAws.isTruncated());但是,它也为我count提供了那些不包含任何对象的前缀。例如,如果我的前缀是a/b/c并且我的 S3 具有以下结构:bucketName/a/b/c/d/obj1bucketName/a/b/c/e/obj2bucketName/a/b/c/f/现在,在这里我们可以看到a/b/c/f没有对象,但a/b/c/d并a/b/c/e没有有对象,所以count应该是2,但我的代码使计为3。如何修改我的代码以获得正确的count?
查看完整描述

2 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

Amazon S3 实际上没有文件夹/目录。

例如,您可以运行以下命令:

aws s3 cp foo.txt s3://my-bucket/a/b/c/foo.txt

即使路径a/b/c不存在,这也有效。

然后,如果该对象随后被删除,则路径消失。

这是因为每个对象的文件名 ('Key') 是完整路径。Amazon S3 使它“看起来”有目录,但实际上没有。

那么,当你创建一个文件夹时会发生什么?答案是系统创建了一个与路径同名的零长度对象。

在您的情况下,有一个零长度对象称为/a/b/c/f/. 这使目录出现(即使没有目录这样的东西)。

虽然a/b/c/f/可能不包含对象,但一个名为a/b/c/f/.

如何解决这个问题?以下是一些选项:

  • 不要创建目录。通过在给定路径中创建对象,让它们自动“出现”。这样,就不会出现目录名称的零长度文件。

  • 更改您的代码以忽略零长度对象。


查看完整回答
反对 回复 2021-11-24
?
慕斯709654

TA贡献1840条经验 获得超5个赞

我做了以下代码更改,现在我得到了正确的计数


val reqAws:ListObjectsV2Request = new ListObjectsV2Request().withBucketName(awsBucketName).withPrefix(prefixForAws);

var resultAws:ListObjectsV2Result = null;

var totalFilesInAws:Int = 0;

do {

  resultAws = awsS3Client.listObjectsV2(reqAws);

  val summariesForAws:java.util.List[S3ObjectSummary] = resultAws.getObjectSummaries()

  for(k <- summariesForAws.asScala) {

    if(!(k.getKey.toString().endsWith("/"))) {

      totalFilesInAws+= 1;

    }

  }

  val token:String = resultAws.getNextContinuationToken();

  reqAws.setContinuationToken(token);

} while (resultAws.isTruncated());


查看完整回答
反对 回复 2021-11-24
  • 2 回答
  • 0 关注
  • 229 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信