gpt4 book ai didi

amazon-web-services - 使用 S3 进行用户上传的最佳实践是什么?

转载 作者:行者123 更新时间:2023-12-04 08:07:14 27 4
gpt4 key购买 nike

我想知道您建议使用 s3 运行用户上传系统。我计划使用 MongoDB 来存储元数据,例如上传器、大小等。我应该如何将实际文件存储在 s3 中。

这是我的一些想法,你认为什么是最好的?所有这些示例都涉及将元数据保存到 MongoDB。

1.我应该将所有文件存储在一个桶中吗?
2. 也许将它们组织成日期(例如 6/8/2014/mypicture.png)?
3.我是否应该将它们全部保存在一个存储桶中,但添加一个字符串(例如 d1JdaZ9-mypicture.png)以避免重复。
4. 或者我应该为一个文件夹生成一个长字符串,并将文件存储在该文件夹中。 (保留原始文件名)。例如sh8sb36zkj391k4dhqk4n5e4ndsqule6/mypicture.png

最佳答案

这主要取决于您打算如何使用图片以及哪些对象/类/模块/等。在您的代码中实际上将处理检索它们。

  • 如果您发现自己想做诸如“所有用户在特定日期上传”之类的事情 - 一个简单的命名约定,其中包含年、月和日的文件夹以及用户唯一 ID 的顶级文件夹将解决问题.
  • 如果您想确保唯一性并避免存储桶中的冲突,您也可以生成一个唯一的字符串。

  • 但是,由于您拥有 MongoDB,它(我假设)实际上会按日期处理用户上传的这些查询等,它使您的存储桶的选择比功能更美观。

    如果您在 mongoDB 中存储的只是 key /URL,那么您的存储桶的实际结构是什么并不重要。尽管如此,仍然以某种连贯的方式将其拆分是有意义的 - 可能将所有用户的上传分组并给每个用户一个唯一的名称(生成一个唯一的名称或为文件名添加一个唯一的前缀)。

    话虽如此,您是否认为可能会考虑更改图像的存储方式?您可能会转移到 CDN。第三方可能会提供您可能想尝试的更便宜/更好的产品。在这种情况下,简单地将键/URL 存储在 MongoDB 中并不是一个好主意,因为您必须更新每个条目。

    为了使这个相对面向 future ,我建议你给你的上传一个明确的结构。我通常会选择:
    bucket_name/user_id/yyyy/mm/dd/unique_name.jpg

    然后,您的数据库只需要存储文件名和上传时间戳。

    您可以在逻辑中引入一个中间层(可能是一个新类,或者只是一个辅助函数/方法),然后根据此信息生成文件的 URL。这样,如果你以后改变你的存储方式,你只需要在这个中间层做一个小的改变(当然是在迁移你的文件之后),而不用担心 MongoDB。

    关于amazon-web-services - 使用 S3 进行用户上传的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24113987/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com