java - 亚马逊 AWS S3 桶递归提取

标签 java amazon-web-services amazon-s3 aws-sdk

我正在使用 amazon s3 java 库连接到我的 s3 存储桶并获取文件列表。 我需要递归地浏览这个目录。在这样做的时候,如果我遇到一个文件,我需要下载它。 如何在 S3 中区分目录和文件。

这是我的代码片段

AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
AmazonS3 s3Client = new AmazonS3Client(credentials);
ObjectListing objectsListing = s3Client.listObjects(new ListObjectsRequest(bucketName, prefix, null, null, Integer.MAX_VALUE));

获取到上层目录的对象列表后,我需要获取目录和文件的列表并进行处理

如果有办法做到这一点,请帮我解决这个问题

谢谢

最佳答案

S3 并没有真正的“目录”。如果你愿意,你可以通过使用 setDelimiter 来假装。和 getCommonPrefixes ,但默认行为是列出存储桶中的所有对象,无论它们的键是否包含“/”。

如果您打算使用 AmazonS3Client 滚动自己的下载代码,请注意 S3 一次最多会从 listObjects 返回 1000 个键,即使您要求更多键也是如此。您需要检查 ObjectListing 上的 IsTruncated 标志,如果设置了循环并发送另一个带有标记集的请求以获取下一页结果。

最后但同样重要的是,我将为 TransferManager 类添加一个插件,其 downloadDirectory方法(keyPrefix 为“”)听起来好像只用一行代码就可以完成您想要的事情?

关于java - 亚马逊 AWS S3 桶递归提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30999057/

相关文章:

Java - 通过整数选择对象

Java - 在字符串数组中搜索字符串

email - 使用 AWS 进行电子邮件地址转发

php - 使用 AWS PHP SDK 将图像保存到 S3

java - 尝试使用 HttpClient 设置 session cookie

java - Play Framework org.hibernate.PersistentObjectException : detached entity passed to persist: models

android - 在 Android 上使用 Java AWS SDK 与 Android AWS SDK

amazon-web-services - AWS 和 kubernetes 卷 - 如何跨多个 Pod 共享配置?

javascript - 使用 API 生成多个预签名 URL

amazon-s3 - Spark - 加载许多小 csv 需要很长时间