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

Laravel框架中Jodit编辑器图片上传功能异常求助

解决Laravel集成Jodit编辑器图片上传失败问题

问题核心

控制台的500内部服务器错误是根源,导致Jodit无法获取有效响应,进而触发resp is undefined报错。需要从服务器端错误修复和响应格式规范两方面处理。

步骤1:修复服务器端500错误

1.1 修正文件名处理代码

你的代码中使用的imagetrim()并非PHP内置函数,这是直接引发500错误的原因之一。如果是要去除文件名前后空格,改用PHP内置的trim()函数:

$file->move(storage_path('uploads'), trim($file->getClientOriginalName()));

如果是自定义文件名处理函数,确保该函数已在全局或控制器中定义。

1.2 确保上传目录存在且有权限

手动创建目录并设置权限:

mkdir -p storage/uploads
chmod -R 755 storage/uploads

或者在控制器中用代码自动创建(更稳妥):

$uploadPath = storage_path('uploads');
if (!File::exists($uploadPath)) {
    File::makeDirectory($uploadPath, 0755, true);
}

记得在控制器顶部引入Illuminate\Support\Facades\File。

1.3 添加文件验证规则

避免非法文件上传引发错误:

$request->validate([
    'file' => 'required|image|max:2048', // 限制为图片类型,最大2MB
]);

步骤2:返回Jodit要求的响应格式

Jodit上传后需要特定结构的JSON响应,否则会出现resp is undefined错误。修改控制器方法:

use Illuminate\Support\Facades\File;

class UploadController extends Controller
{
    public function index(Request $request)
    {
        // 验证上传文件
        $request->validate([
            'file' => 'required|image|max:2048',
        ]);

        $file = $request->file('file');
        $uploadPath = storage_path('uploads');
        
        // 确保上传目录存在
        if (!File::exists($uploadPath)) {
            File::makeDirectory($uploadPath, 0755, true);
        }

        $fileName = trim($file->getClientOriginalName());
        $file->move($uploadPath, $fileName);

        // 返回符合Jodit要求的JSON响应
        return response()->json([
            'success' => true,
            'file' => [
                'url' => asset('storage/uploads/' . $fileName),
                'name' => $fileName,
                'size' => $file->getSize()
            ]
        ]);
    }
}

步骤3:创建storage目录软链接

Laravel默认无法直接访问storage目录下的文件,需要创建软链接到public目录:

php artisan storage:link

这样asset('storage/uploads/xxx.jpg')才能正确指向上传的图片文件。

步骤4:修正JS代码语法错误

你的JS代码末尾多了一个冗余的});,修正后:

var editor = new Jodit('.editor', {
    textIcons: false,
    iframe: false,
    iframeStyle: '*,.jodit_wysiwyg {color:red;}',
    height: 800,
    defaultMode: Jodit.MODE_WYSIWYG,
    observer: {
        timeout: 100
    },
    commandToHotkeys: {
        'openreplacedialog': 'ctrl+p'
    },
    uploader: {
        url: '/upload'
    }
});

验证测试

完成以上步骤后重新测试:

  • 上传图片时控制台不再出现500错误
  • 图片会成功保存到storage/uploads目录
  • Jodit编辑器能正确显示上传的图片

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:00:14