繁体   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