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

CKEditor图片上传失败求助:JS+PHP解决filerepository-no-upload-adapter错误

解决CKEditor5图片上传报错(filerepository-no-upload-adapter)

核心问题原因

你当前引入的CKEditor5 Classic核心包不包含Simple Upload Adapter插件,虽然配置里写了simpleUpload,但编辑器找不到对应的上传适配器,因此触发该错误。

具体解决步骤

1. 替换CKEditor的CDN资源

将index.html中的CKEditor脚本链接,替换为包含Simple Upload Adapter的构建版本:
原代码:

<script src="https://cdn.ckeditor.com/ckeditor5/34.0.0/classic/ckeditor.js"></script>

替换为:

<script src="https://cdn.ckeditor.com/ckeditor5/34.0.0/classic-with-all-plugins/ckeditor.js"></script>

(注:全插件版本适合快速验证功能,若需精简,可自行构建仅包含核心+Simple Upload Adapter的版本)

2. 简化前端配置

移除不必要的CSRF头(若PHP端未做CSRF校验),简化后的配置如下:

ClassicEditor
    .create(document.querySelector('#editor'), {
        simpleUpload: {
            uploadUrl: 'upload.php'
        }
    })
    .catch(error => {
        console.error(error);
    });

3. 完善PHP端逻辑

你的upload.php已有基础框架,补充类型、大小限制及权限处理,优化后的代码:

<?php
header('Content-Type: application/json');

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    echo json_encode(['error' => '仅支持POST请求']);
    exit;
}

if (!isset($_FILES['upload']) || $_FILES['upload']['error'] !== UPLOAD_ERR_OK) {
    echo json_encode(['error' => '文件上传失败,请检查文件是否合法']);
    exit;
}

$fileTmpPath = $_FILES['upload']['tmp_name'];
$fileName = $_FILES['upload']['name'];
$fileSize = $_FILES['upload']['size'];

// 限制仅允许图片格式
$allowedExtensions = ['jpg', 'jpeg', 'png', 'gif'];
$fileExtension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
if (!in_array($fileExtension, $allowedExtensions)) {
    echo json_encode(['error' => '仅允许上传JPG、JPEG、PNG、GIF格式的图片']);
    exit;
}

// 限制文件大小不超过2MB
$maxFileSize = 2 * 1024 * 1024;
if ($fileSize > $maxFileSize) {
    echo json_encode(['error' => '文件大小不能超过2MB']);
    exit;
}

$uploadFileDir = './uploads/';
if (!file_exists($uploadFileDir)) {
    mkdir($uploadFileDir, 0755, true);
}

// 生成唯一文件名避免冲突
$newFileName = md5(uniqid() . $fileName) . '.' . $fileExtension;
$dest_path = $uploadFileDir . $newFileName;

if (move_uploaded_file($fileTmpPath, $dest_path)) {
    $response = [
        'url' => 'uploads/' . $newFileName
    ];
    echo json_encode($response);
} else {
    echo json_encode(['error' => '无法将文件移动到上传目录,请检查目录权限']);
}
?>

4. 确认uploads目录权限

确保uploads目录拥有PHP进程可写入的权限:

  • 测试环境可临时设置为777,生产环境推荐设置为755

验证测试

完成修改后刷新页面,尝试上传图片:

  • 成功则编辑器自动插入图片
  • 若仍报错,查看浏览器控制台或PHP错误日志定位问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 02:41:01