有关S3密钥名称的建议

时间:2018-10-09 19:35:04

标签: c# .net amazon-web-services amazon-s3

我有一个C#应用程序,用户可以在其中将图像上传到S3存储桶。它是一个电子商务应用程序,所以我期望高负载。我打算在图像名称前添加前缀并上传到S3,以避免出现重复或特殊字符的情况 (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#object-key-guidelines)。

在这种情况下,如果用户希望更改名称(我没有在数据库中存储原始名称和更改的名称映射),我该如何在用户想要访问的应用程序中重新访问同一张上载的图片?

在S3中存储和检索图像以及创建键名时,应该遵循哪些最佳实践?

3 个答案:

答案 0 :(得分:1)

如果希望每个用户都具有隔离的空格名称:

FullKey= MD5(UserName+DateAndTimeofRegistration) + KeyName

答案 1 :(得分:1)

正确的答案是您必须使用数据库

这是您唯一知道的方法:

  • 存在哪些对象
  • 谁创造了他们
  • 应该允许谁访问它们

一旦存储桶中有大量对象(例如数千个),调用Amazon S3以获取对象列表将效率低。他们可能会花费大量时间来检索列表。

因此,除非您完全负责使用户记住他们上载的文件名,否则您将需要自己管理列表。

步骤如下:

  • 上传文件时,请使用Universally unique identifier - Wikipedia
  • 将其存储在Amazon S3中。
  • 向数据库添加条目:记录:原始文件名,唯一名称,用户,上传数据和对象的任何适当的元数据(例如访问权限,有效期以及您的应用所需的任何内容)
  • 当用户要查看文件列表时,请从数据库中检索它
  • 当用户想要下载对象时,请从数据库中查找唯一ID,然后创建一个预签名URL以允许他们从Amazon S3对其进行访问

还要考虑用户如何删除对象,如果他们再次上传具有相同名称的对象(覆盖还是保留两者?),文件是否应在一段时间后过期(否则您需要付费),该怎么办?永久存储)

答案 2 :(得分:0)

您可以为每个图像添加原始文件名和用户的元数据密钥。然后在检索中通过原始文件名键进行搜索。