Amazon AWS S3存储桶递归提取

时间:2015-06-23 09:33:02

标签: 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));

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

如果有办法,请帮我解决这个问题

由于

2 个答案:

答案 0 :(得分:4)

S3确实没有"目录。"如果您愿意,可以使用setDelimitergetCommonPrefixes来假装它,但默认行为是列出存储桶中的所有对象,无论其键是否包含' / ' ES

如果你要使用AmazonS3Client推出自己的下载代码,那么值得注意的是,即使你要求更多,S3也会一次从listObjects返回最多1000个密钥。您将要检查ObjectListing上的IsTruncated标志,如果它已设置循环并发送另一个请求,并设置了Marker以获取下一页结果。

最后但并非最不重要的是,我将为TransferManager类插入一个插件,其downloadDirectory方法(使用""的keyPrefix)听起来像它可能完全与你做的一样想要一行代码?

答案 1 :(得分:1)

S3中没有文件夹或目录。文件名如" abc / pqr / mno.pdf"在文件夹pqr中表示为mno.pdf,而文件夹pqr又在abc中表示,但实际上它表示名为" abc / pqr / mno.pdf"的单个文件。

因此,递归访问逻辑应该进入正在访问文件的应用程序中。 getObject方法应该给出完整的路径,如" abc / pqr / mno.pdf"获取文件mno.pdf