您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關UEditor實現自定義圖片視頻尺寸校驗功能,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
UEditor支持單圖、多圖以及視頻上傳,編輯器配置項支持文件格式、文件大小校驗,對于文件寬高尺寸校驗暫不支持。這里記錄一下自定義圖片、視頻尺寸校驗過程,內容核心主要是擴展校驗邏輯和增加自定義提示文本。
單圖上傳
單圖上傳的邏輯在ueditor.all.js
中,由simpleUpload
組件實現,其內部是通過監聽file
輸入框的變化,來進行文件校驗和上傳。
下圖initUploadBtn
為初始化簡單上傳按鈕方法,也是進行相關校驗的地方。
initUploadBtn
里默認校驗代碼如下:
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(); }; }; });
代碼中的校驗參數1080,和提示文本規范作法是加在配置文件中,這里只起演示作用。
新增的尺寸校驗,是使用FileReader
讀取上傳的文件獲得寬高,進而能夠實現相關尺寸或者比例判斷,校驗效果如下:
多圖上傳
多圖上傳主要涉及三個文件,image.html
、webupload.js
和image.js
。webupload.js
包含各種驗證,包括文件總大小是否超出、單文件是否超出、文件是否重復等等,這里也可以增加自定義驗證,它們會在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
,處理邏輯與多圖上傳一樣。我們可以在上面校驗圖片寬度的基礎上再擴展支持校驗視頻分辨率是否小于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
方法中增加校驗文本
校驗效果:
以上就是UEditor實現自定義圖片視頻尺寸校驗功能,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。