AWS S3 Listing API - 如何列出具有特定前缀的 S3 存储桶内的所有内容

我正在尝试列出prefixS3 存储桶中特定的所有项目。这是我的目录结构:


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 中可以实现这一点吗?


慕莱坞森
浏览 91回答 1
1回答

德玛西亚99

Amazon S3 中实际上并不存在文件夹。它是一个扁平的对象存储系统。例如,使用AWS 命令行界面 (CLI),我可以将命令复制到 Amazon S3 存储桶:aws s3 cp foo.txt s3://my-bucket/folder1/folder2/foo.txt即使不存在,这项工作也folder1很好folder2。这是因为对象存储时使用包含对象完整路径的Key(文件名)。因此,上面的对象实际上有一个 Key(文件名):folder1/folder2/foo.txt然而,为了让事情变得更容易,Amazon S3 管理控制台让它看起来好像有文件夹。在 S3 中,这些称为通用前缀而不是文件夹。因此,当您在指定 a 的同时进行 API 调用以列出存储桶的内容时Prefix,它只会显示“列出 Key 以该字符串开头的所有对象”。您的列表不显示任何文件夹,因为它们实际上并不存在。现在,只是与我自己矛盾,实际上可以创建一个文件夹(例如,通过单击管理控制台中的“创建文件夹”)。这实际上创建了一个与文件夹同名的零长度对象。然后,该文件夹将出现在列表中,因为它实际上列出的是零长度对象而不是文件夹。这可能就是为什么Item1/Item2/出现在您的列表中,但Item1/Item2/Item3没有出现的原因。在某个阶段,某人必须“创建了一个名为 的文件夹” Item1/Item2/,该文件夹实际上使用该密钥创建了一个零长度对象。
打开App,查看更多内容
随时随地看视频慕课网APP