簡體   English   中英

AWS S3 Listing API-如何列出具有特定前綴的S3存儲桶中的所有內容

[英]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

即使folder1folder2不存在,該工作也很好。 這是因為對象使用包含對象完整路徑的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM