Django2.2.6中如何配置django-froala-editor上传图片到AWS S3
Django 2.2.6 配置FroalaField上传图片至AWS S3方法
FroalaField本身不支持直接传入upload_to参数——它本质是存储富文本HTML内容的TextField,文件上传逻辑走编辑器独立的上传接口,和模型字段定义本身没有直接绑定,参照以下步骤配置即可实现和原生FileField一致的上传路径规则,文件自动存入S3:
前置依赖与基础S3配置
- 安装S3存储所需依赖
pip install django-storages boto3
- 修改项目
settings.py,注册S3存储后端并配置基础连接信息
INSTALLED_APPS = [ # 保留原有已注册的应用 'storages', ] # AWS S3 连接参数 AWS_ACCESS_KEY_ID = "你的S3访问密钥ID" AWS_SECRET_ACCESS_KEY = "你的S3访问密钥" AWS_STORAGE_BUCKET_NAME = "你的目标存储桶名称" AWS_S3_REGION_NAME = "存储桶所在地域,例如ap-northeast-1" AWS_S3_FILE_OVERWRITE = False AWS_DEFAULT_ACL = None # 将Django默认文件存储切换为S3 DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
配置Froala上传路径
固定路径场景
如果不需要动态生成路径,直接在settings.py中添加Froala专属上传路径配置即可,上传的文件会自动存入S3对应路径下:
# 配置Froala编辑器上传文件在S3中的存储根路径 FROALA_UPLOAD_PATH = "blog/froala_assets/"
你的模型代码不需要做任何修改,保持原有FroalaField定义即可:
from django.db import models from froala_editor.fields import FroalaField class BlogPost(models.Model): short_title = models.CharField(max_length=200, null=True, blank=False, db_column='db_short_title') title = models.CharField(max_length=200) blurb = FroalaField(max_length=300) report_file = models.FileField(upload_to=get_blog_filepath, null=True, blank=True)
动态路径场景(复用现有get_blog_filepath逻辑)
如果需要和report_file字段完全复用同一套动态路径生成规则,需要替换Froala默认的上传视图:
- 注释掉项目
urls.py中默认的Froala路由
# 注释默认路由 # path('froala_editor/', include('froala_editor.urls')),
- 自定义上传视图,在视图中调用你已有的
get_blog_filepath方法生成存储路径,走Django默认文件存储(已配置为S3)完成上传,最后按Froala要求的格式返回文件访问地址即可,逻辑和普通S3文件上传完全一致。 - 将自定义上传视图的路由添加到
urls.py中,替换原有默认上传接口地址。
验证方式:配置完成后在富文本编辑器中上传本地图片,打开S3控制台对应路径下可以看到上传的文件,富文本中自动插入的图片地址为S3的访问地址即配置生效。
内容的提问来源于stack exchange,提问作者Yusuf
相关产品推荐
相关产品推荐

