【问题标题】:How does AWS S3 store files? (directory structure)AWS S3 如何存储文件? (目录结构)
【发布时间】:2016-10-17 06:00:06
【问题描述】:

我们正处于开发阶段。我们原本计划使用专用的基础设施,但将决定换成了 AWS 云。

上传图片的目录结构实现如下:

web_root\{year}\{month}\{day}\{type}_{filename_md5_hash}.jpeg

类型为s 用于小图像或o 用于原始尺寸。小图像是使用过滤器创建的。

问题是我听说 AWS S3 不能让您控制存储桶内的目录结构。

您的宝贵解释总是有很大帮助。谢谢

【问题讨论】:

  • 你在这里已经有了一些好的答案,所以另一个可能是多余的,但关于 S3 的事情是文件夹由对象键(=“路径”)中的 / 模拟。您只需在其名称中加上斜杠,即可通过 API 将对象“上传到”文件夹中。无需创建文件夹,只要文件存在,它们就存在。这是可能的,在控制台中,或者通过使用/ 作为最后一个字符创建空对象,但这完全没有必要。没有真正的层次结构,因此对文件夹“中”的文件数量没有限制或性能考虑。玩它。
  • @Michael-sqlbot,谢谢

标签: php symfony amazon-web-services file-upload amazon-s3


【解决方案1】:

AWS S3 文档中对此进行了介绍:

Working with Folders

在 Amazon S3 中,存储桶和对象是主要资源,其中对象存储在存储桶中。 Amazon S3 具有扁平结构,没有您在典型文件系统中看到的层次结构。但是,为了简化组织,Amazon S3 控制台支持将文件夹概念作为对象分组的一种方式。 Amazon S3 通过使用对象的键名前缀来做到这一点。

例如,您可以在控制台中创建一个名为photos 的文件夹,并在其中存储一个名为myphoto.jpg 的对象。然后该对象以键名photos/myphoto.jpg 存储,其中photos/ 是前缀。

...

文件夹内可以有文件夹,但桶内不能有桶。 您可以将对象直接上传和复制到文件夹中。可以创建、删除和公开文件夹,但不能重命名。对象可以从一个文件夹移动到另一个文件夹。

因此,您确实可以使用存储桶中类似的文件夹结构将文件上传到 S3:

http://{bucket}.{endpoint}.amazonaws.com/web_root/{year}/{month}/{day}/{type}_{filename_md5_hash}.jpeg

或者

http://{endpoint}.amazonaws.com/{bucket}/web_root/{year}/{month}/{day}/{type}_{filename_md5_hash}.jpeg

【讨论】:

  • 谢谢先生的解释。
  • 你能详细说明这是为什么吗?使用扁平结构是否有某种性能优势?
【解决方案2】:

S3 不是一个普通的文件系统,它没有这样的文件结构,但它确实有对象引用的嵌套键,甚至有点像 API 一样假装它是文件系统(你使用 aws s3 ls 来列出一个存储桶,然后在您在对象树中移动时继续使用它,就像使用文件系统一样)。

因此,如果您想创建一个名为 foo_ashdbasd.jpeg 的对象,并且通常希望它位于像 web_root\2016\06\15 这样的文件夹结构中,那么您只需写入 S3 存储桶中名为 web_root/2016/06/15/foo_ashdbasd.jpeg 的对象即可。

【讨论】:

    猜你喜欢
    • 2016-01-04
    • 2014-04-05
    • 2022-01-23
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 2017-10-17
    相关资源
    最近更新 更多