Django如何配置settings.py实现文件上传至Amazon S3而非本地文件夹
问题根因
你当前仅配置了静态文件的S3存储后端,未对用户上传的媒体文件(食谱图片属于媒体文件范畴)指定S3存储后端,Django默认使用本地文件系统存储媒体资源,因此图片不会上传到S3。
修复方案
- 最简修复:直接在settings.py的S3配置段添加如下配置,指定媒体文件默认使用S3存储即可
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
- 进阶优化(可选):如果需要区分静态文件和媒体文件的存储路径、避免同名文件覆盖,可以自定义存储类实现隔离,操作如下:
- 在你的应用根目录下新建
storage_backends.py文件,写入如下代码:
from storages.backends.s3boto3 import S3Boto3Storage class StaticStorage(S3Boto3Storage): location = 'static' default_acl = 'public-read' class MediaStorage(S3Boto3Storage): location = 'mediafiles' default_acl = 'public-read' file_overwrite = False- 将settings.py中原有的存储配置替换为以下内容:
STATICFILES_STORAGE = '你的应用名称.storage_backends.StaticStorage' DEFAULT_FILE_STORAGE = '你的应用名称.storage_backends.MediaStorage' - 在你的应用根目录下新建
- 额外检查项:确保前端提交食谱的form标签带有
enctype="multipart/form-data"属性,否则文件不会被正常提交,你当前能把图片存在本地说明该配置大概率正确,可作为排查备选。
修改配置后重启服务再测试上传,图片就会自动同步到S3存储桶中。
内容的提问来源于stack exchange,提问作者noviceCoder
相关产品推荐
相关产品推荐

