gpt4 book ai didi

java - S3 java API 未正确列出文件夹。

转载 作者:行者123 更新时间:2023-11-30 06:58:31 25 4
gpt4 key购买 nike

我试图列出 s3 存储桶下的文件夹,问题是使用 S3 浏览器工具,我可以看到四个文件夹,但是当我使用 java/scala 代码获取存储桶下的文件夹列表时,它返回只有一个文件夹。我使用简单的 AWS-JAVA-SDK 使用了以下代码。

val awsCreds: BasicAWSCredentials = new BasicAWSCredentials(accessKey, accessSecret)
val s3: AmazonS3 = new AmazonS3Client(awsCreds)
val listObjectsRequest = new ListObjectsRequest()
.withBucketName(bucketName).withPrefix(prefix)
.withDelimiter(delimiter);
val objectListing = s3.listObjects(listObjectsRequest);
val directories = objectListing.getCommonPrefixes
println(directories.mkString(","))

它只打印一个文件夹/staging

我也尝试过 awsScala库并使用以下代码

val bucket = s3.bucket("prod-tapp").get
val summaries=s3.ls(bucket, "/")
summaries.foreach(println(_))

但结果相同。

我可以在 Windows 上使用 aws s3 浏览器的桌面应用程序查看正确的文件夹。这是结果的屏幕截图。 enter image description here

有什么建议吗?

谢谢

最佳答案

我猜您没有在前缀中包含分隔符 (/)。

如果我运行以下代码(Java,但并不重要):

public class S3Prefix {

private static final AmazonS3Client s3 = new AmazonS3Client();

public static void main(String[] args) {
Arrays.asList(null, "test1", "test1/").forEach(S3Prefix::listPrefix);
}

public static void listPrefix(String prefix) {
System.out.println("Listing prefix '" + prefix + "'");
final ListObjectsV2Result result = s3.listObjectsV2(new ListObjectsV2Request()
.withPrefix(prefix)
.withBucketName("raniz-prefix-test")
.withDelimiter("/"));

System.out.println("\tCommon prefixes");
result.getCommonPrefixes().forEach(p -> System.out.println("\t\t" + p));

System.out.println("\tKeys");
result.getObjectSummaries().forEach(s -> System.out.println("\t\t" + s.getKey()));
}
}

我得到以下输出:

Listing prefix 'null'
Common prefixes
test1/
test2/
test3/
Keys
Listing prefix 'test1'
Common prefixes
test1/
Keys
Listing prefix 'test1/'
Common prefixes
Keys
test1/
test1/bar.txt
test1/foo.txt

如您所见,如果您想列出该“文件夹”的内容,在前缀中包含分隔符非常重要。

关于java - S3 java API 未正确列出文件夹。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41358177/

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