当前位置: 首页 > 面试题库 >

仅列出s3存储桶中的子文件夹

施永宁
2023-03-14
问题内容

我有一个s3结构,如下所示:

s3bucketname -> List of first level keys -> List of second level keys -> List of third level keys -> Actual file.

我需要做的就是给定s3bucket的名称和一个第一级密钥的条目,我需要位于第一级密钥下的所有第二级密钥的名称。因此,从本质上来说,如果我们将其视为一个文件夹,则将获得的名称(root folder即)s3bucketname和其子文件夹之一的名称subfolder1,我想列出其中的所有文件夹subfolder1。虽然只是名称,而不是完整的路径。

有人可以指出如何使用亚马逊的Java SDK在Java中做到这一点吗?

谢谢


问题答案:

我做了下面的代码,看起来似乎很好,您必须传递a prefix并确保前缀以 / 结束,并指定要获取子目录列表的定界符。以下应该工作:

public List<String> listKeysInDirectory(String bucketName, String prefix) {
    String delimiter = "/";
    if (!prefix.endsWith(delimiter)) {
        prefix += delimiter;
    }

    ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
            .withBucketName(bucketName).withPrefix(prefix)
            .withDelimiter(delimiter);
    ObjectListing objects = _client.listObjects(listObjectsRequest);
    return objects.getCommonPrefixes();
}


 类似资料:
  • 有没有一种方法可以将文件列表从一个S3存储桶复制到另一个存储桶?两个S3存储桶都在同一个AWS帐户中。我可以使用aws cli命令一次复制一个文件: 然而,我有1000份文件要复制。我不想复制源存储桶中的所有文件,因此无法使用sync命令。有没有一种方法可以用需要复制的文件名列表来调用一个文件,从而自动化这个过程?

  • 问题内容: 我需要列出S3存储桶中某个文件夹中包含的所有文件。 文件夹结构如下 我有与用户有关的文件和与某个用户的联系人有关的文件。我需要同时列出两者。 要列出文件,我使用以下代码: 要列出某个用户的文件,我使用以下前缀: 并且我正确地获得了除子目录之外的目录中的所有文件,例如: 要列出某个用户联系人的文件,我使用以下前缀: 但是在这种情况下,我还将目录本身作为返回的对象: 为什么我会得到这种行为

  • 我有一个Amazon S3存储桶,所有设置都处于默认模式。当我转到我的Bucket权限选项卡并查看Public access/Everyone部分时,所有选项都为空,因此所有内容都是私有的。 现在我制作一个带有很长随机sha1-hash的文件夹,我在这个文件夹中上传一些文件和子文件夹,并将整个文件夹公开。是否可以检测(列出)此文件夹? 看起来不错。但也许还有其他方法可以检测我的公用文件夹?

  • 问题内容: 使用boto3,我可以访问我的AWS S3存储桶: 现在,存储桶包含文件夹,例如,文件夹本身包含多个带有时间戳的子文件夹。我需要知道这些子文件夹的名称来完成我正在做的另一项工作,我想知道是否可以让boto3为我检索这些子文件夹。 所以我尝试了: 它提供了一个字典,其键“目录”为我提供了所有第三级文件,而不是第二级时间戳目录,实际上,我得到了一个包含以下内容的列表: {u’ETag’:’

  • 每个上传类别有多个s3桶,还是一个带子文件夹的桶,还是一个链接的s3桶更好?我确信用户图像会比剖析图片多,每个桶有5TB的限制,每个账户有100个桶。我正在使用aws boto库和https://github.com/amol-/depot 我的文件夹的结构是以下哪种方式? 最后一个意味着它实际上是一个10TB的存储桶,当bucket_1中的文件超过5TB时,就会创建一个新的存储桶。但所有上传的内

  • 我有2个AWS帐户。我试图复制文件从帐户1到帐户2在桶2在美国西部2地区。我有所有必要的IAM政策,相同的凭据适用于两个帐户。我使用python boto3库。 如图所示,复制函数在指向目标帐户2/us-west-2的客户端对象上执行。它是如何获取帐户1/us-east1中的源文件的?我应该提供作为复制函数的输入吗?