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

Django环境下CKEDITOR禁用PillowBackend缩略图或直接存JPG的方法

CKEditor剪贴板图片存储优化问题解答

一、启用PillowBackend后禁用缩略图生成

如果你用的是django-ckeditor的PillowBackend,要关掉自动生成缩略图的功能,直接在项目的settings.py里加一行配置就行:

CKEDITOR_THUMBNAIL_CREATE = False

这个配置会直接切断PillowBackend生成缩略图的逻辑,同时保留它将图片转存为JPG的核心功能,不需要改其他复杂配置。

二、无需PillowBackend,直接将剪贴板图片存为JPG且不生成缩略图

这种情况得自己写上传处理逻辑,步骤很清晰:

  1. 写自定义上传视图
    自己实现一个接收CKEditor上传请求的视图,把剪贴板传过来的图片直接转成JPG格式保存,然后返回CKEditor要求的响应格式。示例代码(基于Django):
    from django.http import JsonResponse
    from django.conf import settings
    from PIL import Image
    import io
    import os
    from uuid import uuid4
    
    def custom_ckeditor_image_upload(request):
        if request.method != 'POST' or not request.FILES.get('upload'):
            return JsonResponse({'uploaded': False, 'error': {'message': '无效的上传请求'}})
        
        img_file = request.FILES['upload']
        # 打开图片并转换为JPG
        with Image.open(img_file) as img:
            # 处理PNG的透明通道,转JPG需要替换为白色背景
            if img.mode in ('RGBA', 'LA'):
                bg = Image.new('RGB', img.size, (255, 255, 255))
                bg.paste(img, mask=img.split()[-1])
                img = bg
            # 把图片写入内存流
            img_buffer = io.BytesIO()
            img.save(img_buffer, format='JPEG', quality=85)
            img_buffer.seek(0)
            
            # 生成唯一文件名,避免重复
            file_name = f"{uuid4().hex}.jpg"
            # 定义存储路径(根据你的媒体目录配置调整)
            save_path = os.path.join(settings.MEDIA_ROOT, 'ckeditor_imgs', file_name)
            os.makedirs(os.path.dirname(save_path), exist_ok=True)
            
            # 写入文件到磁盘
            with open(save_path, 'wb') as f:
                f.write(img_buffer.read())
        
        # 返回CKEditor需要的JSON响应
        return JsonResponse({
            'uploaded': True,
            'url': f"{settings.MEDIA_URL}ckeditor_imgs/{file_name}"
        })
    
  2. 修改CKEditor的上传配置
    在settings.py的CKEDITOR_CONFIGS里,把默认的上传地址换成你刚写的视图URL:
    CKEDITOR_CONFIGS = {
        'default': {
            # 其他原有配置...
            'filebrowserImageUploadUrl': '/ckeditor/custom-upload/',
            'filebrowserUploadUrl': '/ckeditor/custom-upload/',
        }
    }
    
  3. 配置路由映射
    在项目的urls.py里添加对应的路由,让请求能找到你的自定义视图:
    from django.urls import path
    from .views import custom_ckeditor_image_upload
    
    urlpatterns = [
        # 其他路由...
        path('ckeditor/custom-upload/', custom_ckeditor_image_upload, name='ckeditor_custom_upload'),
    ]
    

这套方案完全绕开了PillowBackend,直接在上传阶段完成格式转换,而且不会生成任何缩略图,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:05:52