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

标签 django postgresql amazon-s3

我们将文件存储在 Amazon AWS S3 中,并希望在 Postgres 的文档表中保留对这些文件的引用。我正在寻找最佳实践。我们使用 Python/Django,目前存储从 boto3.s3.key.Key().generate_url(...) 返回的 URL。但是有很多问题:

  • 必须从 URL 中解析存储桶和键。
  • 需要对键名进行urldecode。
  • 不支持object versioning .
  • Unicode 支持很容易搞砸,尤其是由于 urlencode/decode 步骤。

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

最佳答案

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

  • 数据库中的唯一对象 ID(可能是 UUID)(Postgres 有一个本地 UUID 类型)
  • 配置中的bucket名称和路径(因为我们将所有相同类型的对象存储在相同的bucket+path下)

这样你至少可以:

  • 将对象移动到不同的存储桶/路径,而无需重写整个数据库表
  • 如果您愿意,从 S3 切换到本地存储
  • 在不丢失对象跟踪的情况下丢弃主键(例如,在分区表时)

关于django - 在数据库中存储对 AWS S3 对象的引用的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47268512/

相关文章:

linux - 将文件下载到 AWS S3 存储桶

Django 合并广告

performance - 使用最新版本的 PostgreSQL 在 Windows 上的性能

python - 如何将 2 个 django 查询合并为一个具有对象限制的查询

postgresql - 如何使用postgresql将时间间隔转换为带时区的时间戳?

python - python中的sql。 sql中的字符串有什么用

java - 如何将图像文件从亚马逊 s3 移动到亚马逊 ec2 并使用 java 运行实例

amazon-web-services - 如何使用无服务器框架在AWS Lambda函数上添加S3触发事件?

django - django 1.8无法执行django.db.utils.ProgrammingError:关系“auth_user”不存在

python - 我如何知道亚马逊是否成功发送电子邮件