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

时间:2017-12-20 21:25:18

标签: amazon-web-services amazon-s3

我正在尝试创建一个能够在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可以帮助我们实现这一目标,还是我们需要手工制作这个解决方案?

2 个答案:

答案 0 :(得分: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中 - 它们只是文件名的一部分。因此,您只需存储它就可以在给定目录中创建文件 - 无需预先创建目录。

答案 1 :(得分:0)

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

祝你好运!