Django 在数据库中存储对AWS S3对象的引用的最佳实践?

Django 在数据库中存储对AWS S3对象的引用的最佳实践?,django,postgresql,amazon-s3,Django,Postgresql,Amazon S3,我们将文件存储在AmazonAWSS3中,并希望在Postgres的文档表中保留对这些文件的引用。我正在寻找最佳实践。我们使用Python/Django,当前存储从boto3.s3.key.key()返回的URL。生成URL(…)。但这方面有很多问题: 必须解析URL中的bucket和key 需要对密钥名进行URL解码 不支持 Unicode支持很容易搞砸,尤其是由于urlencode/decode步骤 因此,我正在考虑将Bucket、Key和Version存储在三个单独的字段中,并将Key

我们将文件存储在AmazonAWSS3中,并希望在Postgres的文档表中保留对这些文件的引用。我正在寻找最佳实践。我们使用Python/Django,当前存储从
boto3.s3.key.key()返回的URL。生成URL(…)
。但这方面有很多问题:

  • 必须解析URL中的bucket和key
  • 需要对密钥名进行URL解码
  • 不支持
  • Unicode支持很容易搞砸,尤其是由于urlencode/decode步骤

因此,我正在考虑将Bucket、Key和Version存储在三个单独的字段中,并将Key创建为DB主键加上安全编码的文件名的组合,但不知道是否有更好的方法?

不确定是否是最好的方法,但我们存储:

  • 数据库中唯一的对象ID(可能是UUID)(Postgres具有本机的
    UUID
    类型)
  • 配置中的bucket名称和路径(因为我们将同一类型的所有对象存储在同一bucket+路径下)
这样,您至少可以:

  • 将对象移动到不同的bucket/路径,而无需重写整个数据库表
  • 如果选择从S3切换到本地存储
  • 扔掉主键(例如,在对表进行分区时),而不丢失对对象的跟踪

希望了解您最终是如何处理此问题的,或者您发现了哪些最佳做法。考虑回答你自己的问题吗?基本上,我是这样做的,就像我说的“考虑”一样。