如何在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
相关产品推荐
相关产品推荐

