在AWS S3上创建过时子目录的简便方法

问题描述 投票:0回答:2

我正在尝试创建一个能够在S3中存储用户上传文件的Web服务。问题是我们希望文件存储在“日期目录”中。

例如,如果用户在a.txt上传12/1/2017 at 9:15am,则该文件在S3中应如下所示:

https://s3-eu-west-1.amazonaws.com/test-bucket/uploaded/2017/12/1/9/a.txt

S3是否有任何API可以帮助我们实现这一目标,还是我们需要手工制作这个解决方案?

amazon-web-services amazon-s3
2个回答
3
投票

S3中没有这样的API。将Amazon S3视为存储服务,而不是应用程序或数据库。

应用程序负责以所需的命名格式存储数据 - 就像在磁盘上存储数据一样。

顺便说一句,您的命名格式可以带来一些改进:

  • 始终将字段扩展到正确的位数(使用01表示1月而不是1),以便它们正确排序。
  • 考虑一下您的用例 - 如果您要按年扫描文档,那么/2017/12/01/09/a.txt命名格式是有意义的,因为您可以查看2017目录(而不是S3中确实存在的目录)。如果没有,那么只需将其存储为/2017-12-01-09-a.txt
  • 明确指出哪一个是月与日 - 美国是世界上唯一一个将“12/1/2017”视为12月1日的国家。世界其他地方将其视为“1月12日”。使用2017-12-01的格式清楚地表明它是2017年12月1日。
  • 命名冲突怎么样?在给定的一天只能有一个人上传具有给定名字的文件吗?您如何区分上传具有相同名称的文件的不同用户?
  • 实际情况是,文件名完全不相关 - 您的应用程序应使用数据库来跟踪用户上传的对象,并为每个对象分配一个唯一的名称。稍后请求文件时,在数据库中查找文件名,然后提供该文件。不要将S3文件名用作伪数据库,其中名称传达特定含义,否则您通常必须重命名文件以添加更多含义! 目录实际上并不存在于S3中 - 它们只是文件名的一部分。因此,您只需存储它就可以在给定目录中创建文件 - 无需预先创建目录。

0
投票

AWS S3不提供此类逻辑。但是应该通过相当容易的方式使用应用程序的时间信息来创建这样的s3对象密钥(“路径”)。

祝好运!

© www.soinside.com 2019 - 2024. All rights reserved.