UEditor 自定義圖片視頻尺寸校驗功能的實現(xiàn)代碼
ueditor是百度編輯器,官網(wǎng)地址:http://ueditor.baidu.com/website/
UEditor支持單圖、多圖以及視頻上傳,編輯器配置項支持文件格式、文件大小校驗,對于文件寬高尺寸校驗暫不支持。這里記錄一下自定義圖片、視頻尺寸校驗過程,內(nèi)容核心主要是擴(kuò)展校驗邏輯和增加自定義提示文本。
單圖上傳
單圖上傳的邏輯在ueditor.all.js
中,由simpleUpload
組件實現(xiàn),其內(nèi)部是通過監(jiān)聽file
輸入框的變化,來進(jìn)行文件校驗和上傳。
下圖initUploadBtn
為初始化簡單上傳按鈕方法,也是進(jìn)行相關(guān)校驗的地方。
initUploadBtn
里默認(rè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; } // 判斷文件格式是否錯誤 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; } // 校驗通過,上傳文件 domUtils.on(iframe, 'load', callback); form.action = utils.formatUrl(imageActionUrl + (imageActionUrl.indexOf('?') == -1 ? '?' : '&') + params); form.submit(); });
可以看到這里有好幾處判斷邏輯,全部通過后才提交表單上傳文件。對于圖片視頻的尺寸校驗,同樣也可以加在這里,通過后才提交,以下為修改后的代碼:
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; } // 判斷文件格式是否錯誤 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; } //校驗文件尺寸寬度 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; } // 校驗通過,上傳文件 domUtils.on(iframe, 'load', callback); form.action = utils.formatUrl(imageActionUrl + (imageActionUrl.indexOf('?') == -1 ? '?' : '&') + params); form.submit(); }; }; });
代碼中的校驗參數(shù)1080,和提示文本規(guī)范作法是加在配置文件中,這里只起演示作用。
新增的尺寸校驗,是使用FileReader
讀取上傳的文件獲得寬高,進(jìn)而能夠?qū)崿F(xiàn)相關(guān)尺寸或者比例判斷,校驗效果如下:
多圖上傳
多圖上傳主要涉及三個文件,image.html
、webupload.js
和image.js
。
webupload.js
包含各種驗證,包括文件總大小是否超出、單文件是否超出、文件是否重復(fù)等等,這里也可以增加自定義驗證,它們會在Uploader
初始化時被一并加載。
新增自定義圖片尺寸校驗方法如下:
/** * @property {int} [fileSingleWidth=undefined] * @namespace options * @for Uploader * @description 驗證單個文件尺寸滿足要求, 不滿足則不允許加入隊列。 */ //====================== 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; } }; } }); });
校驗邏輯寫好后,需要在image.js
的addFile
方法中增加提示文本。
校驗效果:
視頻上傳
視頻上傳同樣也包含三個文件,video.html
、webupload.js
和video.js
,處理邏輯與多圖上傳一樣。我們可以在上面校驗圖片寬度的基礎(chǔ)上再擴(kuò)展支持校驗視頻分辨率是否小于720,代碼如下:
/** * @property {int} [fileSingleWidth=undefined] * @namespace options * @for Uploader * @description 驗證單個文件尺寸滿足要求, 不滿足則不允許加入隊列。 */ //====================== 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; // 校驗視頻分辨率 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{ //校驗圖片寬度 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
方法中增加校驗文本
校驗效果:
到此這篇關(guān)于UEditor 自定義圖片視頻尺寸校驗功能的實現(xiàn)代碼的文章就介紹到這了,更多相關(guān)UEditor自定義圖片視頻內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
支持多瀏覽器(IE、Firefox、Opera)剪切板復(fù)制函數(shù)_腳本之家修正版
有朋友要剪切板復(fù)制函數(shù),可網(wǎng)上的好多代碼都是不能運(yùn)行的,各種其它符號,導(dǎo)致了腳本的不可運(yùn)行,腳本之家站長特整理了下,修正了錯誤。2008-12-12JavaScript, select標(biāo)簽元素左右移動功能實現(xiàn)
這篇文章主要介紹了JavaScript, select標(biāo)簽元素左右移動功能實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05前端JavaScript實現(xiàn)大數(shù)據(jù)前后模糊搜索的方法詳解
這篇文章主要為大家詳細(xì)介紹了前端JavaScript實現(xiàn)大數(shù)據(jù)前后模糊搜索的四個常見方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2023-12-12JavaScript實現(xiàn)復(fù)制粘貼剪切功能三種方法
這篇文章主要給大家介紹了關(guān)于JavaScript實現(xiàn)復(fù)制粘貼剪切功能的相關(guān)資料,在實際案例的操作過程中,不少人都會遇到這樣的開發(fā)需求,文中通過代碼將三種方法介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01Javascript類定義語法,私有成員、受保護(hù)成員、靜態(tài)成員等介紹
JS只是一門支持面向?qū)ο缶幊痰恼Z言,通過OO可以讓我們的代碼組織更加人性化。可是與傳統(tǒng)基與類的面向?qū)幊陶Z言不同它沒有類概念并且沒成員訪問修飾符。這多少會給我們編程工作會帶來一些束縛2011-12-12JS中IP地址與整數(shù)相互轉(zhuǎn)換的實現(xiàn)代碼
這篇文章主要介紹了JS中IP地址與整數(shù)相互轉(zhuǎn)換的實現(xiàn)代碼,需要的朋友可以參考下2017-04-04Javascript基礎(chǔ)之?dāng)?shù)組的使用
這篇文章主要介紹了Javascript基礎(chǔ)之?dāng)?shù)組的使用的相關(guān)資料,介紹的非常詳解,具有參考借鑒價值,感興趣的朋友一起學(xué)習(xí)吧2016-05-05JavaScript之iterable_動力節(jié)點Java學(xué)院整理
這篇文章主要介紹了JavaScript之iterable,遍歷Array可以采用下標(biāo)循環(huán),遍歷Map和Set就無法使用下標(biāo)。為了統(tǒng)一集合類型,ES6標(biāo)準(zhǔn)引入了新的iterable類型,Array、Map和Set都屬于iterable類型2017-06-06