Php AWS S3如何存储文件?(目录结构)
我们正处于开发阶段。我们计划使用一个专用的基础设施,但将决定权转移到AWS云上 上传图像的目录结构实现如下: web_root\{year}\{month}\{day}{type}{filename\u md5\u hash}.jpeg 其中,小图像的类型为Php AWS S3如何存储文件?(目录结构),php,symfony,amazon-web-services,file-upload,amazon-s3,Php,Symfony,Amazon Web Services,File Upload,Amazon S3,我们正处于开发阶段。我们计划使用一个专用的基础设施,但将决定权转移到AWS云上 上传图像的目录结构实现如下: web_root\{year}\{month}\{day}{type}{filename\u md5\u hash}.jpeg 其中,小图像的类型为s,原始尺寸的类型为o。小图像是使用过滤器创建的 问题是,我听说AWSS3不能控制bucket中的目录结构 你无价的解释总是很有帮助的。谢谢AWS S3文档中介绍了这一点: 在AmazonS3中,bucket和对象是主要资源,对象存储在bu
s
,原始尺寸的类型为o
。小图像是使用过滤器创建的
问题是,我听说AWSS3不能控制bucket中的目录结构
你无价的解释总是很有帮助的。谢谢AWS S3文档中介绍了这一点: 在AmazonS3中,bucket和对象是主要资源,对象存储在bucket中AmazonS3采用扁平结构,没有典型文件系统中的层次结构。但是,为了组织的简单性,AmazonS3控制台支持文件夹概念,作为对对象进行分组的一种方式。AmazonS3通过使用对象的键名前缀来实现这一点 例如,您可以在控制台中创建名为
photos
的文件夹,并在其中存储名为myphoto.jpg
的对象。然后将对象存储为键名photos/myphoto.jpg
,其中photos/
是前缀
文件夹中可以有文件夹,但存储桶中不能有存储桶您可以将对象直接上载和复制到文件夹中。文件夹可以创建、删除和公开,但不能重命名。对象可以从一个文件夹移动到另一个文件夹
因此,您确实可以使用bucket中类似的文件夹结构将文件上载到S3:
http://{bucket}.{endpoint}.amazonaws.com/web_root/{year}/{month}/{day}/{type}{filename\u md5\u hash}.jpeg
或
http://{endpoint}.amazonaws.com/{bucket}/web_root/{year}/{month}/{day}/{type}{type}.jpeg
S3不是一个普通的文件系统,它本身没有文件结构,但它确实有对象引用的嵌套键,甚至有点假装它与API类似(您可以使用aws s3 ls
列出一个bucket,然后在对象树中移动时使用它,就像使用文件系统一样)
因此,如果您想创建一个名为
foo\u ashdbasd.jpeg的对象,并且通常您希望它位于这样的文件夹结构中web\u root\2016\06\15
,那么您只需在S3存储桶中写入一个名为web\u root/2016/06/15/foo\u ashdbasd.jpeg的对象,您已经有了一些很好的答案,所以另一个问题需要解决这可能是多余的,但是S3的问题是文件夹是由对象键(=“path”)中的/
模拟的API上的一个文件夹,只需在其名称中添加斜杠即可。无需创建文件夹,只要文件存在,它们就存在。可以在控制台中,或通过创建最后一个字符为/
的空对象,但这是完全不必要的。没有真正的层次结构,因此没有性能限制考虑文件夹中文件的数量。玩一下。@Michael sqlbot,谢谢您的解释。您能详细说明原因吗?使用扁平结构是否有某种性能优势?