【问题标题】:CKEditor 4.5.0 BETA fileUpload API issueCKEditor 4.5.0 BETA 文件上传 API 问题
【发布时间】:2015-05-06 21:01:30
【问题描述】:

我正在尝试 CKEditor 4.5.0 BETA,因为它允许我在所有浏览器中粘贴剪贴板中的图像,但我找不到任何有关文件上传 API 的文档(新?), This Link 中的示例使用 CKFinder,但我没有,我需要在 PHP 中创建自己的服务器端代码(我正在使用 Larevel 4)。

当我尝试上传文件时,请求中的唯一参数是文件(名为“upload”),如何将我的 CKEditor 实例与我的服务器连接?也许缺少什么?

CKEDITOR.replace('newticket', {
            extraPlugins    : 'uploadimage,image2',
            uploadUrl       : '/ckeditor/newticket/uploads',

            height                  : '200px',
            toolbar                 : [
                { name: 'clipboard', items: [ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ] },
                { name: 'basicstyles', items: [ 'Bold', 'Italic', 'Underline' ] },
                { name: 'lists', items: [ 'NumberedList', 'BulletedList', 'Outdent', 'Indent', 'Blockquote' ] },
                { name: 'insert', items: ['Link', '-', 'HorizontalRule'] },
                { name: 'font', items: [ 'Format', '-', 'TextColor', 'BGColor'] }
            ]
        });

编辑 1

我在我的服务器端(Laravel 4)中使用此代码,文件已上传,CKeditor 显示一条消息,说明文件已正确上传,但未将 img 标签添加到文档中

public function uploadFilesFromCKeditor() {

    if(Input::hasFile('upload')) {

        $fileName = sha1(time() . Input::file('upload')->getClientOriginalName()) . '.' . Input::file('upload')->getClientOriginalExtension();

        $success = Input::file('upload')->move(public_path() . '/ckeditor/uploads', $fileName);

        if($success) {

            $jsonResponse = array(
                'fileName'  => $fileName,
                'url'       => 'ckeditor/uploads/' . $fileName,
                'uploaded'  => 'true',
                'error'     => array(
                    'message'   => ''
                )
            );

        } else {

            $jsonResponse = array(
                'fileName'  => Input::file('upload')->getClientOriginalName(),
                'url'       => '',
                'uploaded'  => 'false',
                'error'     => array(
                    'message'   => 'Error msg'
                )
            );

        }

        return Response::json($jsonResponse);

    } else {

        $jsonResponse = array(
            'fileName'  => '',
            'url'       => '',
            'uploaded'  => 'false',
            'error'     => array(
                'message'   => 'error msg'
            )
        );

        return Response::json($jsonResponse);

    }

}

【问题讨论】:

    标签: file-upload ckeditor


    【解决方案1】:

    由于该功能当时处于测试版,因此尚未创建完整的教程,但您应该能够根据事件文档处理它。

    如果您收到包含文件的单个条目upload 的请求,则表示您正在顺利进行,这是发送的默认请求。如果你想修改它,请使用fileUploadRequest event

    CKEditor 期望接收 JSON 作为响应,因此您需要在服务器端保存文件(使用 PHP 函数 move_uploaded_file,参见 http://php.net/manual/en/features.file-upload.php)并返回 (echo) JSON 数据。

    您可以找到预期的 JSON 响应格式以及如何处理任何其他响应 here 的示例。

    【讨论】:

    • 上传后无法让编辑添加图片,我将编辑我的问题进行解释
    • 不,应该自动添加图像。您在可编辑元素中是否有任何内容(与 DOM 检查器一起检查),可能是带有空 src<img>?上传期间编辑器中是否出现了某些内容(应该有图像占位符)?如果上传速度太快而看不到它,则会在服务器端增加一些延迟。占位符应替换为最终图像:github.com/ckeditor/ckeditor-dev/blob/major/plugins/uploadimage/… 从这里调用的内容:github.com/ckeditor/ckeditor-dev/blob/major/plugins/…
    • 我检查了源,但那里什么都没有:P 我会尝试延迟上传,看看是否有任何变化
    • 您好!我错了!您可以在上传的参数中发送 true,但要使图像上传工作,您需要将“图像”包含到工具栏:p
    • 很高兴听到这个消息! :D 如果您不想要工具栏中的图像按钮,您也可以使用editor.addFeature( editor.getCommand( 'image' ) )(但无论如何都需要启用该插件)或者您可以使用config.extraAllowedContent
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 2015-12-24
    • 1970-01-01
    • 2017-01-11
    相关资源
    最近更新 更多