You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Django-CKEditor上传图片返回400错误排查求助

CKEditor上传HTTP 400错误排查及解决方法

问题原因与对应解决措施

  • 路由配置错误:将ckeditor上传路由放在了i18n多语言路由规则内,多语言前缀会导致上传请求路径不匹配
    解决方法:把ckeditor相关路由从i18n_patterns中移出,放到全局通用路由列表中:
    # 修正后的urls.py结构
    urlpatterns = [
        # 其他无需多语言前缀的全局路由
        path('ckeditor/',include('ckeditor_uploader.urls')),
    ] + i18n_patterns(
        # 原有的需要多语言前缀的业务路由保留在此处
        ...
    )
    
    if settings.DEBUG:
        urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    
  • 缺少MEDIA基础配置:settings.py未配置MEDIA根路径和访问前缀,导致上传路径无法正常解析
    解决方法:在settings.py中补充MEDIA相关配置:
    # settings.py新增配置
    MEDIA_URL = '/media/'
    MEDIA_ROOT = BASE_DIR / 'media'
    
  • CKEditor上传配置缺失:默认上传方式未自动携带CSRF令牌,被Django CSRF中间件拦截返回400
    解决方法:在CKEDITOR_CONFIGS的对应配置项中添加上传方式参数:
    # 修正后的CKEDITOR_CONFIGS配置
    CKEDITOR_CONFIGS={
         'myconfig':{
            'toolbar':"Custom",
            'toolbar_Custom':[
                # 原有工具栏配置保持不变
            ],
            'height': 100,
            # 新增以下配置,强制使用表单方式上传自动携带CSRF令牌
            'filebrowserUploadMethod': 'form',
        },
    }
    
  • 文件名格式问题:上传的图片文件名包含中文或特殊字符,Django无法正常解析触发400
    解决方法:可自定义上传文件名重命名规则,自动将特殊字符、中文转换为标准ASCII字符,避免解析错误。
  • 生产环境配置缺失:DEBUG模式关闭后未配置MEDIA路径代理,同时上传接口未配置对应访问权限
    解决方法:生产环境需用Nginx等服务代理MEDIA路径的访问,同时根据业务需求给ckeditor上传接口配置对应的访问权限校验规则。

内容的提问来源于stack exchange,提问作者Teq Teq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:06:02