1. 程式人生 > 其它 >kindeditor上傳及播放視訊的問題

kindeditor上傳及播放視訊的問題

kindeditor是一款傳統的編輯器,年代久遠,有些新功能不支援。比如上傳和播放視訊就很容易出問題。

上傳

一是格式,二是大小。這些都好解決,但這次遇到一個隱藏的問題。頁面報錯:

System.Web.HttpException:“超過了最大請求長度。”

對應報錯檔案為:
HttpPostedFile imgFile = context.Request.Files["imgFile"];
原因:
asp.net預設Request檔案大小為4M,而上傳視訊遠超。
修改:
Web.config檔案:
httpRuntime 節點增加 maxRequestLength = "51200",單位為KB,設定為50M。

播放:

上傳成功後頁面無法播放視訊,顯示外掛不支援。

原因:
kindeditor編輯器預設為上傳的視訊檔案生成embed標籤,而該標籤已不受支援。
修改:
讓KindEditor使用H5 video標籤播放視訊。

將kindeditor-all.js檔案中的embed替換為video,再增加一些相應的設定,如控制欄,迴圈和自動播放等。

開啟/kindeditor/kindeditor-all.js
首先在Ln304行:
embed: ['id', 'class', 'src', 'width', 'height', 'type', 'loop', 'autostart', 'quality', '.width', '.height', 'align', 'allowscriptaccess', 'wmode'],
後增加:
video: ['id', 'class', 'src', 'width', 'height', 'type', 'loop', 'autoplay

', 'quality', '.width', '.height', 'align', 'controls', 'muted','controlslist'],
注:這裡增加這些屬性非常重要,如果不列出的話,儲存時後臺會自動遮蔽掉。即使在_mediaEmbed函式中重定義了html字串也不行。

1. 修改 function _mediaType(src) 函式,增加mp4、ogg、webm的型別定義:

if (/\.(mp4)(\?|$)/i.test(src)) {
    return 'video/mp4';
}
if (/\.(ogg)(\?|$)/i.test(src)) {
    return
'video/ogg'; } if (/\.(webm)(\?|$)/i.test(src)) { return 'video/webm'; }

2. 修改 function _mediaEmbed(attrs) 函式,判斷如果是mp4格式則使用video標籤:

if (attrs.type == "video/mp4") {
    var html = '<video ';
    _each(attrs, function (key, val) {
        html += key + '="' + val + '" ';
    });
    html += ' controls="controls" autoplay="autoplay" muted="muted" controlslist="nodownload" />';
}

注:谷歌會禁止自動播放功能,即使加了autoplay屬性也不管用,IE可以。解決辦法是增加muted,即設為靜音谷歌就允許自動播放了。另外controlslist="nodownload"是為了拿掉控制欄中的“下載”按鈕。

js壓縮成min.js:

實際中使用的是kindeditor-all-min.js,修改好kindeditor-all.js以後,還需要進行壓縮。壓縮方法如下:
先下載安裝node.js
然後在node.js的npm裡安裝uglify
npm install uglify-js -g
壓縮js檔案:
uglifyjs kindeditor-all.js -o kindeditor-all-min.js
或者
uglifyjs kindeditor-all.js -m -o kindeditor-all-min.js -m引數就是把變數名變成a, b, c, d這樣,壓縮出來的檔案會更小。