2 回答

TA貢獻1798條經驗 獲得超7個贊
Amazon S3 實際上沒有文件夾/目錄。
例如,您可以運行以下命令:
aws s3 cp foo.txt s3://my-bucket/a/b/c/foo.txt
即使路徑a/b/c
不存在,這也有效。
然后,如果該對象隨后被刪除,則路徑消失。
這是因為每個對象的文件名 ('Key') 是完整路徑。Amazon S3 使它“看起來”有目錄,但實際上沒有。
那么,當你創建一個文件夾時會發生什么?答案是系統創建了一個與路徑同名的零長度對象。
在您的情況下,有一個零長度對象稱為/a/b/c/f/
. 這使目錄出現(即使沒有目錄這樣的東西)。
雖然a/b/c/f/
可能不包含對象,但有一個名為a/b/c/f/
.
如何解決這個問題?以下是一些選項:
不要創建目錄。通過在給定路徑中創建對象,讓它們自動“出現”。這樣,就不會出現目錄名稱的零長度文件。
更改您的代碼以忽略零長度對象。

TA貢獻1840條經驗 獲得超5個贊
我做了以下代碼更改,現在我得到了正確的計數
val reqAws:ListObjectsV2Request = new ListObjectsV2Request().withBucketName(awsBucketName).withPrefix(prefixForAws);
var resultAws:ListObjectsV2Result = null;
var totalFilesInAws:Int = 0;
do {
resultAws = awsS3Client.listObjectsV2(reqAws);
val summariesForAws:java.util.List[S3ObjectSummary] = resultAws.getObjectSummaries()
for(k <- summariesForAws.asScala) {
if(!(k.getKey.toString().endsWith("/"))) {
totalFilesInAws+= 1;
}
}
val token:String = resultAws.getNextContinuationToken();
reqAws.setContinuationToken(token);
} while (resultAws.isTruncated());
添加回答
舉報