为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕莱坞森 2023-06-26 15:29:09
我正在尝试列出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.jpgItem1/Item2/Item3/Item5/image_1.jpgItem1/Item2/Item3/Item5/image_2.jpg我想得到的是:Item1/Item2/Item1/Item2/Item3Item1/Item2/Item3/Item4Item1/Item2/Item3/Item5Item1/Item2/Item3/Item4/image_1.jpgItem1/Item2/Item3/Item5/image_1.jpgItem1/Item2/Item3/Item5/image_2.jpg无论如何,在 golang 中可以实现这一点吗?
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

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/,该文件夹实际上使用该密钥创建了一个零长度对象。


查看完整回答
反对 回复 2023-06-26
  • 1 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信