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

如何在CodeIgniter4中从CKEditor4的textarea获取上传文件名?

在CodeIgniter4中获取CKEditor4上传文件的信息

你之前的写法不正确,原因是CKEditor4的文件上传不会将文件数据绑定到pagecontent这个textarea字段——textarea仅存储富文本内容(包括文件上传后的链接),文件上传是独立的请求,且CKEditor默认使用upload作为上传文件的字段名。

以下是完整解决方案:

1. 配置CKEditor4的上传接口

在视图文件中初始化CKEditor时,指定上传处理的CI4控制器路由:

CKEDITOR.replace('pagecontent', {
    filebrowserUploadUrl: '/upload/handle', // 对应CI4的控制器路由
    filebrowserUploadMethod: 'form'
});

同时在app/Config/Routes.php中添加路由规则:

$routes->post('/upload/handle', 'UploadController::handle');

2. 创建上传处理控制器

新建app/Controllers/UploadController.php,编写文件上传处理逻辑:

<?php namespace App\Controllers;

use CodeIgniter\Controller;

class UploadController extends Controller
{
    public function handle()
    {
        // CKEditor默认以上传字段名为'upload',而非textarea的name
        $file = $this->request->getFile('upload');

        // 校验文件有效性
        if (!$file->isValid()) {
            echo json_encode([
                'uploaded' => false,
                'error' => ['message' => $file->getErrorString()]
            ]);
            return;
        }

        // 移动文件到可写目录(如writable/uploads)
        $randomFileName = $file->getRandomName(); // 用随机名避免重名冲突
        $file->move(WRITEPATH . 'uploads', $randomFileName);

        // 返回CKEditor要求的响应格式,同时可获取文件信息
        $fileInfo = [
            'original_name' => $file->getName(),
            'saved_name' => $randomFileName,
            'size' => $file->getSize(),
            'mime_type' => $file->getMimeType()
        ];

        // 此处可将$fileInfo存入数据库(可选)
        // $model = new \App\Models\FileModel();
        // $model->save($fileInfo);

        echo json_encode([
            'uploaded' => true,
            'url' => base_url('uploads/' . $randomFileName),
            'file_info' => $fileInfo // 可选:返回文件信息给前端
        ]);
    }
}

3. 注意事项

  • 确保writable/uploads目录拥有服务器写入权限
  • 可按需添加文件类型、大小限制,例如:
    $allowedMimes = ['image/jpeg', 'image/png', 'image/gif'];
    if (!in_array($file->getMimeType(), $allowedMimes)) {
        echo json_encode([
            'uploaded' => false,
            'error' => ['message' => '仅支持JPG/PNG/GIF格式图片']
        ]);
        return;
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 23:12:11