给kindeditor编辑器添加FLV上传播放功能,其中使用flowplayer,适用于大部分版本

最近在做几个项目都用到编辑器,我以前用eWebEditor,按照网上的方法也增加了FLV上传播放的功能。

这次想换个编辑器,看上了kindeditor。

使用过程中,发现上传FLV文件后不能自动播放,百度了几个修改的攻略:

1.首先是kindereditor交流中心的一个帖子:http://kindeditor.net/view.php?bbsid=7&postid=7275

看到评论就没尝试这个方法了。

2.其次是csdn的一个帖子:http://blog.csdn.net/tangjunping/article/details/8098003

博主介绍的是4.0.5的修改方法,他也修改了4.1.4的,但现在最新版本是4.1.10,有点强迫症的人会使用新版本。于是我也就忽略了这个方法。

3.其它还有些低版本别人修改好的打包文件,我没试。

4.也是csdn的一个帖子,他修改了两处简单的地方http://blog.csdn.net/zhjx922/article/details/7601660

我尝试了,没成功。

5.博客园的帖子。http://www.cnblogs.com/henshui/archive/2013/02/06/2903610.html

在我尝试了好几次,研究了几番之后,成功了。可以看到这个帖子我的回复得到提示。但要注意程序中编辑器的路径。而且帖子中的播放器使用了后没有进度条之类的工具条,经过我几番研究搜索尝试,加上了。

所以以下代码基于kindeditor-4.1.10和博客园的帖子修改。


1、在plugin下建立文件夹flvplayer, 建立flvplayer.js文件 源码如下

/*******************************************************************************
* KindEditor - WYSIWYG HTML Editor for Internet
* Copyright (C) 2006-2011 kindsoft.net
*
* @author Roddy <luolonghao@gmail.com>
* @site http://www.kindsoft.net/
* @licence http://www.kindsoft.net/license.php
* 再次修改:by tmouse 2014.4.7
*******************************************************************************/
 
KindEditor.plugin('flvplayer', function(K) {
    var self = this, name = 'flvplayer', lang = self.lang(name + '.'),
        allowFlashUpload = K.undef(self.allowFlashUpload, true),
        allowFileManager = K.undef(self.allowFileManager, false),
        formatUploadUrl = K.undef(self.formatUploadUrl, true),
        extraParams = K.undef(self.extraFileUploadParams, {}),
        filePostName = K.undef(self.filePostName, 'imgFile'),
        uploadJson = K.undef(self.uploadJson, self.basePath + 'php/upload_json.php');
    self.plugin.flash = {
        edit : function() {
            var html = [
                '<div style="padding:20px;">',
                //url
                '<div class="ke-dialog-row">',
                '<label for="keUrl" style="width:60px;">' + lang.url + '</label>',
                '<input class="ke-input-text" type="text" id="keUrl" name="url" value="" style="width:160px;" />  ',
                '<input type="button" class="ke-upload-button" value="' + lang.upload + '" />  ',
                '<span class="ke-button-common ke-button-outer">',
                '<input type="button" class="ke-button-common ke-button" name="viewServer" value="' + lang.viewServer + '" />',
                '</span>',
                '</div>',
                //width
                '<div class="ke-dialog-row">',
                '<label for="keWidth" style="width:60px;">' + lang.width + '</label>',
                '<input type="text" id="keWidth" class="ke-input-text ke-input-number" name="width" value="550" maxlength="4" /> ',
                '</div>',
                //height
                '<div class="ke-dialog-row">',
                '<label for="keHeight" style="width:60px;">' + lang.height + '</label>',
                '<input type="text" id="keHeight" class="ke-input-text ke-input-number" name="height" value="400" maxlength="4" /> ',
                '</div>',
                '</div>'
            ].join('');
            var dialog = self.createDialog({
                name : name,
                width : 450,
                title : self.lang(name),
                body : html,
                yesBtn : {
                    name : self.lang('yes'),
                    click : function(e) {
                        var url = K.trim(urlBox.val()),
                            width = widthBox.val(),
                            height = heightBox.val();
                        if (url == 'http://' || K.invalidUrl(url)) {
                            alert(self.lang('invalidUrl'));
                            urlBox[0].focus();
                            return;
                        }
                        if (!/^\d*$/.test(width)) {
                            alert(self.lang('invalidWidth'));
                            widthBox[0].focus();
                            return;
                        }
                        if (!/^\d*$/.test(height)) {
                            alert(self.lang('invalidHeight'));
                            heightBox[0].focus();
                            return;
                        }
                    //  var html = K.mediaImg(self.themesPath + 'common/blank.gif', {
//                              src : url,
//                              type : K.mediaType('.swf'),
//                              width : width,
//                              height : height,
//                              quality : 'high'
//                          });
                    var html='<script src="kindeditor-4.1.10/plugins/flvplayer/flowplayer/flowplayer-3.2.11.min.js"></script>';
                    html += '<a href="'+url+'" style="display:block;width:'+width+'px;height:'+height+'px;margin-left:auto;margin-right:auto" id="player">    

</a>';
                    //html+='<script language="JavaScript">flowplayer("player", "kindeditor-4.1.10/plugins/flvplayer/flowplayer/flowplayer-

3.2.15.swf");</script>';                 
                    html+='<script language="JavaScript">var player=flowplayer("player","kindeditor-4.1.10/plugins/flvplayer/flowplayer/flowplayer-

3.2.16.swf",{plugins:{pseudo:{url:"kindeditor-4.1.10/plugins/flvplayer/flowplayer/flowplayer.pseudostreaming-3.2.12.swf"},controls:{autoHide:

{fullscreenOnly:true,hideDelay:2000},height:30,scrubber:true,buttonColor:"rgba(0, 0, 0, 

0.9)",buttonOverColor:"#000000",backgroundGradient:"medium",backgroundColor:"#D7D7D7",sliderColor:"#2c2c2c",bufferColor:"#606060",progressColor:"#056e9f",sli

derBorder:"1px solid #808080",sliderHeight:20,volumeSliderColor:"#FFFFFF",volumeBorder:"1px solid 

#808080",timeColor:"#000000",durationColor:"#535353",tooltips:{buttons:true,play:"播放",fullscreen:"全屏",fullscreenExit:"退出全屏",pause:"暂停",mute:"静

音",unmute:"取消静音"}}},onStart:function(clip){animate(this,{bottom:31})},onFullscreen:function(){},onFullscreenExit:function(){},onBegin:function()

{}});</script>';
                        self.insertHtml(html).hideDialog().focus();
                 }
                }
            }),
            div = dialog.div,
            urlBox = K('[name="url"]', div),
            viewServerBtn = K('[name="viewServer"]', div),
            widthBox = K('[name="width"]', div),
            heightBox = K('[name="height"]', div);
            urlBox.val('http://');
 
            if (allowFlashUpload) {
                var uploadbutton = K.uploadbutton({
                    button : K('.ke-upload-button', div)[0],
                    fieldName : filePostName,
                    extraParams : extraParams,
                    url : K.addParam(uploadJson, 'dir=flvplayer'),
                    afterUpload : function(data) {
                        dialog.hideLoading();
                        if (data.error === 0) {
                            var url = data.url;
                            if (formatUploadUrl) {
                                url = K.formatUrl(url, 'absolute');
                            }
                            urlBox.val(url);
                            if (self.afterUpload) {
                                self.afterUpload.call(self, url, data, name);
                            }
                            alert(self.lang('uploadSuccess'));
                        } else {
                            alert(data.message);
                        }
                    },
                    afterError : function(html) {
                        dialog.hideLoading();
                        self.errorDialog(html);
                    }
                });
                uploadbutton.fileBox.change(function(e) {
                    dialog.showLoading(self.lang('uploadLoading'));
                    uploadbutton.submit();
                });
            } else {
                K('.ke-upload-button', div).hide();
            }
 
            if (allowFileManager) {
                viewServerBtn.click(function(e) {
                    self.loadPlugin('filemanager', function() {
                        self.plugin.filemanagerDialog({
                            viewType : 'LIST',
                            dirName : 'flvplayer',
                            clickFn : function(url, title) {
                                if (self.dialogs.length > 1) {
                                    K('[name="url"]', div).val(url);
                                    if (self.afterSelectFile) {
                                        self.afterSelectFile.call(self, url);
                                    }
                                    self.hideDialog();
                                }
                            }
                        });
                    });
                });
            } else {
                viewServerBtn.hide();
            }
 
            var img = self.plugin.getSelectedFlash();
            if (img) {
                var attrs = K.mediaAttrs(img.attr('data-ke-tag'));
                urlBox.val(attrs.src);
                widthBox.val(K.removeUnit(img.css('width')) || attrs.width || 0);
                heightBox.val(K.removeUnit(img.css('height')) || attrs.height || 0);
            }
            urlBox[0].focus();
            urlBox[0].select();
        },
        'delete' : function() {
            self.plugin.getSelectedFlash().remove();
        }
    };
    self.clickToolbar(name, self.plugin.flash.edit);
});

这里面的var html=''经过我的修改,分成3句,后一个script经过http://js.clicki.cc/美化成一行,也增加了工具条的功能。

可能复制过来换成多行了,需要自行修改成一行!切记!!!


2、在themes\default\default.css这个文件末尾增加样式:

.ke-icon-flvplayer {
    background-position: 0px -512px;
    width: 16px;
    height: 16px;
}

3、默认插件调用增加

修改kindeditor.js文件

items : 里面 'flash' 后增加 'flvplayer'

htmlTags里增加:
script:['src','language'], 我是在最前面font前加的。因为编辑器采用了白名单过滤,在第1处里的Html这个变量里使用了script代码。

4、关于上传和文件管理 的服务器脚本修改(以asp.net为例)

修改upload_json.ashx文件
在对应地方增加 extTable.Add("flvplayer", "flv,f4v,mp4");

修改file_manager_json.ashx文件
修改某处为if (Array.IndexOf("image,flash,media,file,flvplayer".Split(','), dirName) == -1),也就是增加 flvplayer这个目录名

5、修改语言包lang文件夹下的zh_CN.js文件
对应flash两处的下方添加
第一处:
flvplayer : 'FLV视频',

第二处:
'flash.viewServer' : '文件空间',
'flvplayer.url' : 'URL',
'flvplayer.width' : '宽度',
'flvplayer.height' : '高度',
'flvplayer.upload' : '上传',
'flvplayer.viewServer' : '文件空间',

6、关于 flowplayer的设置

我找来找去,找到了http://chenxiuheng.iteye.com/blog/1880484这个帖子

我只取了其中的 var player 这段,同时下载了里面提到的播放器所要用到的4个文件到本地。里面使用了flowplayer-3.2.16.swf,但同时还要下载低一个版本的flowplayer.controls-3.2.15.swf到对应的文件夹,还有flowplayer.pseudostreaming-3.2.12.swf和flowplayer-3.2.12.min.js

经过这几步,就可以上传播放flv等视频了,这应该是最全的方法了吧?


修改后的kindeditor-4.1.10增加FLV上传播放功能文件可以在csdn资源下载里搜索关键词 kindeditor-4.1.10 



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: KindEditor编辑器可以通过以下步骤上传多张图片: 1. 点击编辑器中的“插入图片”按钮。 2. 在弹出的对话框中,选择“上传图片”选项卡。 3. 点击“选择文件”按钮,选择要上传的图片文件。 4. 重复步骤3,选择多张图片文件。 5. 点击“开始上传”按钮,等待上传完成。 6. 上传完成后,可以在“已上传图片”选项卡中查看已上传的图片。 7. 选中要插入的图片,点击“确定”按钮即可插入到编辑器中。 注意:上传多张图片时,需要等待每张图片上传完成后再选择下一张图片,否则可能会导致上传失败。 ### 回答2: kindeditor是一款非常常用的富文本编辑器,它不仅提供了基本的文本编辑功能,而且还支持上传多张图片的功能。下面就详细介绍一下如何使用kindeditor上传多张图片。 1. 准备工作 首先,在使用kindeditor上传多张图片之前,我们需要先准备好以下内容: ① kindeditor编辑器文件 ② kindeditor上传图片的处理程序文件,这个一般是后台开发人员编写的 ③ 存储上传图片的文件夹,这个一般由后台开发人员在处理程序中设置。 2. 设置kindeditor编辑器 在前端页面中,我们需要先引入kindeditor编辑器的相关文件。这些文件一般包括kindeditor.js和kindeditor.css等。引入之后,我们需要对kindeditor进行一些基本设置,如设置编辑器的宽度、高度等。同时,还需要在配置文件中设置上传图片的选项。 其中,设置上传图片的选项需要设置上传图片的处理程序地址、允许上传的图片类型、最大可以上传的图片大小、是否可以上传多张图片等。 3. 编写后端处理程序 在上传图片的处理程序中,我们一般需要在程序中编写以下基本功能: ① 判断上传的文件是否合法,包括文件类型是否允许上传、文件大小是否在规定范围内等。 ② 将上传的图片保存到指定文件夹中。 ③ 返回上传结果,一般是返回上传的图片地址或者上传失败的原因等。 4. 使用 在前端页面中,我们可以通过点击上传图片按钮来触发上传图片的功能。在点击上传图片按钮后,会弹出选择图片的对话框,我们可以选择多张图片,然后分别进行上传上传完成后,可以在编辑器中看到上传的图片。 总的来说,kindeditor上传多张图片的功能非常实用,可以让我们的文章或网站更加丰富和有趣。同时,对于后端开发人员来说,也需要注意上传图片的文件类型和大小等问题,以确保上传图片的安全性和稳定性。 ### 回答3: KindEditor是一款基于jQuery和Zlib的网页富文本编辑器,它支持表格、混合开发、超过40种已配置的插件、代码自动提示与补全。在KindEditor中,用户可以方便地插入各类多媒体元素,包括图片、音视频等。也就是说,在KindEditor上传多张图片非常容易。 具体的上传过程可以分为以下几个步骤: 1. 在前端页面中添加一个文件上传控件,例如: <input type="file" id="file" name="file" multiple/> 其中,multiple属性表示可以选择多个文件进行上传。 2. 在JavaScript中添加上传代码。使用KindEditor自带的uploadJson接口可以实现多张图片的上传KindEditor.ready(function(K) { var editor = K.editor({ // 设置上传接口 uploadJson: '/upload_json.php', fileManagerJson: '/file_manager_json.php' }); K('#upload_img_btn').click(function() { editor.loadPlugin('multiimage', function() { // 打开上传多张图片的窗口 editor.plugin.multiImageDialog({ clickFn: function(data) { // 上传成功后执行的回调函数 } }); }); }); }); 在上述代码中,uploadJson属性设置上传接口,multiImageDialog方法打开多张图片上传的窗口。 3. 在服务器端编写PHP代码处理上传请求。具体的实现方式因不同的后端语言而异,在PHP中,可以使用$_FILE数组来处理上传文件。例如: if(!empty($_FILES['file']['name'])) { $fileArr = $_FILES['file']; for($i=0; $i<count($fileArr['name']); $i++) { $tmp_name = $fileArr['tmp_name'][$i]; $name = $fileArr['name'][$i]; // 保存文件到指定目录 move_uploaded_file($tmp_name, 'uploads/'.$name); $urlArr[] = 'uploads/'.$name; } echo json_encode(array('error' => 0, 'data' => $urlArr)); } 其中,$fileArr为上传的文件数组,$urlArr保存上传成功后每个文件的URL地址。 综上所述,KindEditor编辑器上传多张图片的步骤包括前端文件上传控件的添加、JavaScript上传代码的编写以及后端服务器代码的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值