我继承了一个使用 Django Suit 实现的 CMS 系统。其中一种表单应该将文件上传到 S3,但它没有发生(文件上传到网络服务器 - EC2,但没有上传到 S3)。
到目前为止我确定的是:
- EC2 实例拥有对 S3 的完全访问权限(通过角色)
- Django 配置文件中设置的用户拥有 S3 的完全访问权限
- 有一个 CloudFront 配置为指向存储桶,并且当通过 URL 访问文件时它可以工作。配置在那里工作
以前的开发人员使用以下方法来处理文件上传:
DEFAULT_FILE_STORAGE = 'fallback_storage.storage.FallbackStorage' FALLBACK_STORAGES = ( 'django.core.files.storage.FileSystemStorage', 'main.custom_storages.MediaStorage' )
我查看了这 3 个类,看看是否缺少配置,但一切看起来都不错。
我不熟悉这种在 Web 服务器和 S3 之间同步文件的方式,因此我可能会遗漏一些非常明显的东西。是否有类似 cron jon 需要在后台运行?
我发现一篇博客文章解释了如何使用 Django 使用 FallbackStorage 将文件上传到 S3。该教程使用 docker。在这种情况下,根本不使用docker。
此时我迷失了方向。有数千个类分布在数十个 Python 库中。对代码进行详尽的分析将花费很长时间。
最佳答案
您可能应该查看 FallbackStorage 类,通常对于将文件上传到 S3,这将是 S3BotoStorage 的存储类,具有正确的 AWS_STORAGE_BUCKET
、AWS_ACCESS_KEY_ID
、 AWS_SECRET_ACCESS_KEY
设置。
stored = models.FileField(storage=S3BotoStorage(bucket=AWS_BUCKET), upload_to='blog-uploads')
关于python - Django + AWS : files not syncing to S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59742658/