UEditor 自定義圖片視頻尺寸校驗(yàn)功能的實(shí)現(xiàn)代碼
ueditor是百度編輯器,官網(wǎng)地址:http://ueditor.baidu.com/website/
UEditor支持單圖、多圖以及視頻上傳,編輯器配置項(xiàng)支持文件格式、文件大小校驗(yàn),對(duì)于文件寬高尺寸校驗(yàn)暫不支持。這里記錄一下自定義圖片、視頻尺寸校驗(yàn)過程,內(nèi)容核心主要是擴(kuò)展校驗(yàn)邏輯和增加自定義提示文本。
單圖上傳
單圖上傳的邏輯在ueditor.all.js中,由simpleUpload組件實(shí)現(xiàn),其內(nèi)部是通過監(jiān)聽file輸入框的變化,來進(jìn)行文件校驗(yàn)和上傳。
下圖initUploadBtn為初始化簡單上傳按鈕方法,也是進(jìn)行相關(guān)校驗(yàn)的地方。

initUploadBtn里默認(rèn)校驗(yàn)代碼如下:
var form = btnIframeDoc.getElementById('edui_form_' + timestrap);
var input = btnIframeDoc.getElementById('edui_input_' + timestrap);
var iframe = btnIframeDoc.getElementById('edui_iframe_' + timestrap);
domUtils.on(input, 'change', function(){
if(!input.value) return;
// 省略部分代碼
/* 判斷后端配置是否沒有加載成功 */
if (!me.getOpt('imageActionName')) {
errorHandler(me.getLang('autoupload.errorLoadConfig'));
return;
}
// 判斷文件格式是否錯(cuò)誤
var filename = input.value,
fileext = filename ? filename.substr(filename.lastIndexOf('.')):'';
if (!fileext || (allowFiles && (allowFiles.join('') + '.').indexOf(fileext.toLowerCase() + '.') == -1)) {
showErrorLoader(me.getLang('simpleupload.exceedTypeError'));
return;
}
// 校驗(yàn)通過,上傳文件
domUtils.on(iframe, 'load', callback);
form.action = utils.formatUrl(imageActionUrl + (imageActionUrl.indexOf('?') == -1 ? '?' : '&') + params);
form.submit();
});
可以看到這里有好幾處判斷邏輯,全部通過后才提交表單上傳文件。對(duì)于圖片視頻的尺寸校驗(yàn),同樣也可以加在這里,通過后才提交,以下為修改后的代碼:
var form = btnIframeDoc.getElementById('edui_form_' + timestrap);
var input = btnIframeDoc.getElementById('edui_input_' + timestrap);
var iframe = btnIframeDoc.getElementById('edui_iframe_' + timestrap);
domUtils.on(input, 'change', function(){
if(!input.value) return;
// 省略部分代碼
/* 判斷后端配置是否沒有加載成功 */
if (!me.getOpt('imageActionName')) {
errorHandler(me.getLang('autoupload.errorLoadConfig'));
return;
}
// 判斷文件格式是否錯(cuò)誤
var filename = input.value,
fileext = filename ? filename.substr(filename.lastIndexOf('.')):'';
if (!fileext || (allowFiles && (allowFiles.join('') + '.').indexOf(fileext.toLowerCase() + '.') == -1)) {
showErrorLoader(me.getLang('simpleupload.exceedTypeError'));
return;
}
//校驗(yàn)文件尺寸寬度
var files = this.files;
var reader = new FileReader();
reader.readAsDataURL(input.files[0]);
reader.onload = function (theFile) {
var image = new Image();
image.src = theFile.target.result;
image.onload = function () {
if (this.width < 1080) {
showErrorLoader('寬度小于1080');
return;
}
// 校驗(yàn)通過,上傳文件
domUtils.on(iframe, 'load', callback);
form.action = utils.formatUrl(imageActionUrl + (imageActionUrl.indexOf('?') == -1 ? '?' : '&') + params);
form.submit();
};
};
});
代碼中的校驗(yàn)參數(shù)1080,和提示文本規(guī)范作法是加在配置文件中,這里只起演示作用。
新增的尺寸校驗(yàn),是使用FileReader讀取上傳的文件獲得寬高,進(jìn)而能夠?qū)崿F(xiàn)相關(guān)尺寸或者比例判斷,校驗(yàn)效果如下:

多圖上傳
多圖上傳主要涉及三個(gè)文件,image.html、webupload.js和image.js。
webupload.js包含各種驗(yàn)證,包括文件總大小是否超出、單文件是否超出、文件是否重復(fù)等等,這里也可以增加自定義驗(yàn)證,它們會(huì)在Uploader初始化時(shí)被一并加載。

新增自定義圖片尺寸校驗(yàn)方法如下:
/**
* @property {int} [fileSingleWidth=undefined]
* @namespace options
* @for Uploader
* @description 驗(yàn)證單個(gè)文件尺寸滿足要求, 不滿足則不允許加入隊(duì)列。
*/
//======================
api.addValidator('fileSingleWidth', function () {
var uploader = this,
opts = uploader.options,
minWidth = 1080;
uploader.on('beforeFileQueued', function (file) {
let that = this;
let type = file.type;
window.URL = window.URL || window.webkitURL;
var reader = new FileReader();
reader.readAsDataURL(file.source.source);
reader.onload = function (theFile) {
var image = new Image();
image.src = theFile.target.result;
image.onload = function () {
if (this.width < minWidth) {
file.setStatus(WUFile.Status.INVALID, 'exceed_width');
that.trigger('error', 'F_EXCEED_SIZE', file);
that.removeFile(file);
return false;
}
};
}
});
});
校驗(yàn)邏輯寫好后,需要在image.js的addFile方法中增加提示文本。

校驗(yàn)效果:

視頻上傳
視頻上傳同樣也包含三個(gè)文件,video.html、webupload.js和video.js,處理邏輯與多圖上傳一樣。我們可以在上面校驗(yàn)圖片寬度的基礎(chǔ)上再擴(kuò)展支持校驗(yàn)視頻分辨率是否小于720,代碼如下:
/**
* @property {int} [fileSingleWidth=undefined]
* @namespace options
* @for Uploader
* @description 驗(yàn)證單個(gè)文件尺寸滿足要求, 不滿足則不允許加入隊(duì)列。
*/
//======================
api.addValidator('fileSingleWidth', function () {
var uploader = this,
opts = uploader.options,
minWidth = 1080;
uploader.on('beforeFileQueued', function (file) {
let that = this;
let type = file.type;
window.URL = window.URL || window.webkitURL;
// 校驗(yàn)視頻分辨率
if (type.indexOf('video') > -1) {
var video = document.createElement('video');
video.preload = 'metadata';
video.src = URL.createObjectURL(file.source.source);
video.onloadedmetadata = () => {
URL.revokeObjectURL(video.src);
if (video.videoHeight < 720) {
file.setStatus(WUFile.Status.INVALID, 'exceed_height');
that.trigger('error', 'F_EXCEED_SIZE', file);
that.removeFile(file);
return false;
}
}
}else{
//校驗(yàn)圖片寬度
var reader = new FileReader();
reader.readAsDataURL(file.source.source);
reader.onload = function (theFile) {
var image = new Image();
image.src = theFile.target.result;
image.onload = function () {
if (this.width < minWidth) {
file.setStatus(WUFile.Status.INVALID, 'exceed_width');
that.trigger('error', 'F_EXCEED_SIZE', file);
that.removeFile(file);
return false;
}
};
}
}
});
});
vedio.js的addFile方法中增加校驗(yàn)文本

校驗(yàn)效果:

到此這篇關(guān)于UEditor 自定義圖片視頻尺寸校驗(yàn)功能的實(shí)現(xiàn)代碼的文章就介紹到這了,更多相關(guān)UEditor自定義圖片視頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript通過字符串調(diào)用函數(shù)的實(shí)現(xiàn)方法
這篇文章主要介紹了JavaScript通過字符串調(diào)用函數(shù)的實(shí)現(xiàn)方法,實(shí)例分析了javascript動(dòng)態(tài)調(diào)用函數(shù)的技巧,需要的朋友可以參考下2015-03-03
js Canvas實(shí)現(xiàn)圓形時(shí)鐘教程
這篇文章主要為大家詳細(xì)介紹了HTML5 Canvas實(shí)現(xiàn)圓形時(shí)鐘簡易教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
JS和Canvas實(shí)現(xiàn)圖片的預(yù)覽壓縮和上傳功能
這篇文章主要介紹了JS和Canvas實(shí)現(xiàn)圖片的預(yù)覽壓縮和上傳功能,實(shí)現(xiàn)此功能大概有兩步,第一步用戶選擇需要上傳的圖片,第二步獲取圖片資源壓縮預(yù)覽上傳,具體實(shí)現(xiàn)代碼大家參考下本文2018-03-03
javascript或asp實(shí)現(xiàn)的判斷身份證號(hào)碼是否正確兩種驗(yàn)證方法
在網(wǎng)頁中經(jīng)常需要輸入正確的身份證號(hào)碼,只能通過程序來驗(yàn)證身份證格式。根據(jù)身份證號(hào)碼生成的原理,就是驗(yàn)證后面幾位就可以了。2009-11-11
JS實(shí)現(xiàn)字符串中去除指定子字符串方法分析
這篇文章主要介紹了JS實(shí)現(xiàn)字符串中去除指定子字符串方法,結(jié)合實(shí)例形式分析了javascript使用字符串替換與分割、聚合兩種子字符串去除相關(guān)操作技巧,需要的朋友可以參考下2018-05-05
微信小程序如何實(shí)現(xiàn)商品列表跳轉(zhuǎn)商品詳情頁功能
最近在學(xué)微信小程序開發(fā)的時(shí)候,碰上了一個(gè)問題,所以想著總結(jié)下,這篇文章主要給大家介紹了關(guān)于微信小程序如何實(shí)現(xiàn)商品列表跳轉(zhuǎn)商品詳情頁功能的相關(guān)資料,需要的朋友可以參考下2022-04-04
JS與jQuery實(shí)現(xiàn)ListBox上移,下移,左移,右移操作功能示例
這篇文章主要介紹了JS與jQuery實(shí)現(xiàn)ListBox上移,下移,左移,右移操作功能,涉及javascript與jQuery的事件響應(yīng)、頁面元素動(dòng)態(tài)操作等相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-05-05
JS前端面試必備——基本排序算法原理與實(shí)現(xiàn)方法詳解【插入/選擇/歸并/冒泡/快速排序】
這篇文章主要介紹了JS前端面試基本排序算法原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了JS常見的基本排序算法相關(guān)原理、實(shí)現(xiàn)方法、時(shí)間復(fù)雜度及操作注意事項(xiàng),需要的朋友可以參考下2020-02-02

