AWS S3如何存储文件? (目录结构)

时间:2016-06-15 22:38:24

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

我们处于开发阶段。我们计划使用专用的infrastcrutre,但将决定交换到AWS云。

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

  

WEB_ROOT \ {年} \ {月} \ {天} \ {类型} _ {filename_md5_hash} .JPEG

对于小图片,类型为s,对于原始尺寸,类型为o。使用过滤器创建小图像。

问题在于我听说AWS S3无法控制存储桶中的目录结构。

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

S3不是普通的文件系统,它没有这样的文件结构,但它确实有对象引用的嵌套键,甚至假装它的文件系统与API一样(你使用{{1}列出一个存储桶,然后在你通过对象树移动时使用它,就像使用文件系统一样。)

因此,如果你想创建一个名为aws s3 ls的对象,通常你希望它位于像foo_ashdbasd.jpeg这样的文件夹结构中,那么你只需要写入一个名为{的S3桶中的对象。 {1}}。