gpt4 book ai didi

java - 在 ObjectListing 结果中排除前缀 S3 的 Java 客户端

转载 作者:搜寻专家 更新时间:2023-11-01 02:28:17 26 4
gpt4 key购买 nike

我有一个具有以下层次结构的 S3 存储桶:

bucketName
folder1
file1

我想从文件夹 1 中获取所有文件。我尝试执行以下操作:

ObjectListing ol = s3Client.listObjects("bucketName", "folder1"); 
List<S3ObjectSummary> summaries = ol.getObjectSummaries();

问题是摘要包含 folder1/folder1/file1。我希望只得到 folder1/file1

环顾互联网,我也试过以下方法:

ListObjectsRequest req = new ListObjectsRequest().withBucketBucketName("bucketName").withPrefix("folder1/").withDelimiter("/"); 

但是这次我没有得到 getObjectSummaries 调用的结果。当我从上面删除 withDelimiter 时,我得到了 folder1\folder1\file1

有什么方法可以让 folder1\file1 恢复原状吗?

请告诉我。谢谢!

最佳答案

一起使用withPrefixwithMarker:

ListObjectsRequest req = new ListObjectsRequest().withBucketName("bucketName").withPrefix("folder1/").withMarker("folder1/");

这是可行的,因为首先你过滤 withPrefix 并获取所有 folder1/* 键,包括 folder1/,然后使用你指定的 withMarker("folder1/") 获取javadoc 中记录的按字典顺序排列在“folder1/”之后的键:

The list will only include keys that occur lexicographically after the marker.

此外,如果 folder1 包含其他子文件夹,您可以使用 withDelimiter 仅获取直接子文件夹:

ListObjectsRequest req = new ListObjectsRequest().withBucketName("bucketName").withPrefix("folder1/").withMarker("folder1/").withDelimiter("/");

这是有效的,因为分隔符“/”使所有子文件夹都汇总到“folder1/”,但您使用标记忽略了此结果。 javadoc 对 withDelimiter 说:

Gets the optional delimiter parameter that causes keys that contain the same string between the prefix and the first occurrence of the delimiter to be combined into a single result element (...). The most commonly used delimiter is "/", which simulates a hierarchical organization similar to a file system directory structure.

--

无论如何,folder1/ 之所以被列出,是因为您肯定是通过 Web 控制台创建的。如果您不直接创建文件夹,而是以编程方式放置对象,例如 put folder2/file2,则该文件夹实际上不会创建为独立对象,因此无法列出。

关于java - 在 ObjectListing 结果中排除前缀 S3 的 Java 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15981658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com