首页 > 解决方案 > 所有文件夹名称都没有出现在 Amazon S3 的列表对象调用中

问题描述

在此处输入图像描述我正在使用以下代码列出 S3 存储桶中存在的所有对象。但问题不在于调用中的所有文件夹名称。我附上了图片以供参考。

AmazonS3 s3Object = AmazonS3Utils.getS3Object(amazonS3ConnectionValues.regionName, amazonS3ConnectionValues.accessKey, amazonS3ConnectionValues.secretKey);
                s3Object.listBuckets();
                ListObjectsV2Result objectsList = s3Object.listObjectsV2(bucket);
                List<S3ObjectSummary> objectSummaries = objectsList.getObjectSummaries();
                for (S3ObjectSummary objectSummary : objectSummaries) {
                    Object[] newRow;
                    newRow = RowDataUtil.allocateRowData(data.outputRowMeta.size());
                    int index = 0;
                    newRow[index++] = objectSummary.getKey();
                    newRow[index++] = objectSummary.getETag();
                    newRow[index++] = objectSummary.getSize();
                    newRow[index++] = objectSummary.getLastModified();
                    newRow[index++] = objectSummary.getStorageClass();
                    putRow(data.outputRowMeta, newRow);

如图所示,响应中未显示文件夹名称“automationedge123/ ,输出中显示了其他文件夹名称,例如“Test Folder/”、“automationedge/”。我不理解这种行为。

标签: javaamazon-web-servicesamazon-s3

解决方案


listObjects 结果可能是分页的。isTruncated()通过查看( link )的返回值,确保您没有查看截断的结果。

listObjects(...)]这是(链接)的javadoc的引用

因为桶可以包含几乎无限数量的键,所以列表查询的完整结果可能非常大。为了管理大型结果集,Amazon S3 使用分页将它们拆分为多个响应。始终检查 ObjectListing.isTruncated() 方法以查看返回的列表是否完整,或者是否需要额外调用才能获得更多结果。或者,使用 AmazonS3Client.listNextBatchOfObjects(ObjectListing) 方法作为获取下一页对象列表的简单方法。


推荐阅读