右elFinder和CKeditor集成直接上传文件

时间:2016-03-16 14:18:54

标签: javascript php laravel elfinder

我使用elFinder laravel package文件管理器和ckeditor。我遵循所有说明步骤,所有事情都有效,除了一个。

当我点击ckEditor中的图像按钮选择(或上传)图像后,在我的计算机上选择图像并单击将其发送到服务器按钮{{1}后,在上传选项卡上显示和上传失败。

这是ckEditor初始化代码:

NotFoundHttpException in RouteCollection.php line 161

根据This Issue,如上所示,我添加<textarea name="content_fa" id="fa_post_content" class="form-control" rows="10"></textarea> <script> var fa_post_content = CKEDITOR.replace('fa_post_content', { toolbar: 'admin_mode', filebrowserBrowseUrl : '{{route('elfinder.ckeditor')}}', filebrowserUploadUrl : '/elfinder/connector.php?cmd=upload' }); </script> 选项。但这也行不通。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

使用演示网站的此代码(+ DnD上传)为here

CKEDITOR.on('dialogDefinition', function (event) {
    var editor = event.editor,
        dialogDefinition = event.data.definition,
        tabCount = dialogDefinition.contents.length,
        uploadButton, submitButton, inputId,
        elfUrl = editor.config.filebrowserUploadUrl,
        // elFinder configs
        elfDirHashMap = { // Dialog name / elFinder holder hash Map
            image : '',
            flash : '',
            files : '',
            link  : '',
            fb    : 'l1_Lw' // fallback target
        },
        customData = {}; // any custom data to post

    for (var i = 0; i < tabCount; i++) {
        uploadButton = dialogDefinition.contents[i].get('upload');
        submitButton = dialogDefinition.contents[i].get('uploadButton');

        if (uploadButton !== null && submitButton !== null) {
            uploadButton.hidden = false;
            submitButton.hidden = false;
            uploadButton.onChange = function() {
                inputId = this.domId;
            }
            submitButton.onClick = function(e) {
                dialogName = CKEDITOR.dialog.getCurrent()._.name;
                var target = elfDirHashMap[dialogName]? elfDirHashMap[dialogName] : elfDirHashMap['fb'],
                    name   = $('#'+inputId),
                    input  = name.find('iframe').contents().find('form').find('input:file'),
                    error  = function(err) {
                        alert(err.replace('<br>', '\n'));
                    };

                if (input.val()) {
                    var fd = new FormData();
                    fd.append('cmd', 'upload');
                    fd.append('overwrite', 0); // disable upload overwrite to make to increment file name
                    fd.append('target', target);
                    $.each(customData, function(key, val) {
                        fd.append(key, val);
                    });
                    fd.append('upload[]', input[0].files[0]);
                    $.ajax({
                        url: elfUrl,
                        type: 'POST',
                        data: fd,
                        processData: false,
                        contentType: false,
                        dataType: 'json'
                    })
                    .done(function( data ) {
                        if (data.added && data.added[0]) {
                            var url = data.added[0].url;
                            var dialog = CKEDITOR.dialog.getCurrent();
                            if (dialogName == 'image') {
                                var urlObj = 'txtUrl'
                            } else if (dialogName == 'flash') {
                                var urlObj = 'src'
                            } else if (dialogName == 'files' || dialogName == 'link') {
                                var urlObj = 'url'
                            } else {
                                return;
                            }
                            dialog.selectPage('info');
                            dialog.setValueOf(dialog._.currentTabId, urlObj, url);
                        } else {
                            error(data.error || data.warning || 'errUploadFile');
                        }
                    })
                    .fail(function() {
                        error('errUploadFile');
                    })
                    .always(function() {
                        input.val('');
                    });
                }
                return false;
            }
        }
    } 
});

答案 1 :(得分:0)

对于现在遇到此问题的任何人来说,解决它的问题是设置filebrowserBrowseUrl。我犯的错误是设置filebrowserUploadUrl而不是filebrowserBrowseUrl。 Elfinder处理内部上传,因此您根本不必使用“发送到服务器”按钮,只需使用浏览服务器按钮。

所以ckeditor代码看起来像这样

CKEDITOR.replace('your-id-here', {

    filebrowserBrowseUrl: '/elfinder/ckeditor',

    }
);

注意用你自己的身份替换你的身份。