[英]AWS S3 Listing API - How to list everything inside S3 Bucket with specific prefix
我正在嘗試在S3存儲桶中列出具有特定prefix
所有項目。 這是我擁有的目錄結構:
Item1/
Item2/
Item3/
Item4/
image_1.jpg
Item5/
image_1.jpg
image_2.jpg
當我將prefex
設置為Item1/Item2
,得到以下結果:
Item1/Item2/
Item1/Item2/Item3/Item4/image_1.jpg
Item1/Item2/Item3/Item5/image_1.jpg
Item1/Item2/Item3/Item5/image_2.jpg
我想得到的是:
Item1/Item2/
Item1/Item2/Item3
Item1/Item2/Item3/Item4
Item1/Item2/Item3/Item5
Item1/Item2/Item3/Item4/image_1.jpg
Item1/Item2/Item3/Item5/image_1.jpg
Item1/Item2/Item3/Item5/image_2.jpg
無論如何,在golang中可以實現這一目標嗎?
文件夾實際上在Amazon S3中不存在。 它是一個平面對象存儲系統。
例如,使用AWS命令行界面(CLI),我可以將命令復制到Amazon S3存儲桶:
aws s3 cp foo.txt s3://my-bucket/folder1/folder2/foo.txt
即使folder1
和folder2
不存在,該工作也很好。 這是因為對象使用包含對象完整路徑的 Key
(文件名)進行存儲。 因此,上面的對象實際上具有一個鍵(文件名):
folder1/folder2/foo.txt
但是,為了使人們更容易使用,Amazon S3管理控制台使它看起來好像有文件夾。 在S3中,這些稱為通用前綴而不是文件夾。
因此,當您在指定Prefix
同時進行API調用以列出存儲桶的內容時,它只會說“列出其鍵以此字符串開頭的所有對象”。
您的清單沒有顯示任何文件夾,因為它們實際上不存在。
現在,要自相矛盾,它實際上是可以創建一個文件夾(例如,通過點擊在管理控制台中創建的文件夾 )。 實際上,這將創建一個長度為0的對象,其名稱與folder相同 。 該文件夾將出現在列表中,因為它實際上是在列出零長度對象而不是文件夾。
這可能就是為什么Item1/Item2/
出現在您的列表中,而Item1/Item2/Item3
卻沒有出現的原因。 在某個階段,某人必須“創建了一個文件夾”,稱為Item1/Item2/
,實際上使用該Key創建了一個零長度的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.