diff --git a/changelog.md b/changelog.md index cf2eccb141..063ebead2e 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,6 @@ # 更新日志 2.0(2020-07) +- bi.file文件上传控件accept属性与 [input accept Attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept) 统一 - 修复了日期类型控件设置一个不在minDate和maxDate之间的日期值时,面板灰化与翻页按钮状态不对的问题 - BI.OB的on方法返回一个解除监听的函数 - 修复了grid_view执行_unMount时不调用子组件的_unMount的问题 diff --git a/src/base/single/editor/editor.multifile.js b/src/base/single/editor/editor.multifile.js index f4aa6073b4..e5af00a38b 100644 --- a/src/base/single/editor/editor.multifile.js +++ b/src/base/single/editor/editor.multifile.js @@ -66,6 +66,10 @@ BI.MultifileEditor = BI.inherit(BI.Widget, { }); }, + _reset: function () { + this.file.reset(); + }, + select: function () { this.file.select(); }, @@ -75,11 +79,12 @@ BI.MultifileEditor = BI.inherit(BI.Widget, { }, upload: function () { + this._reset(); this.file.upload(); }, reset: function () { - this.file.reset(); + this._reset(); } }); BI.MultifileEditor.EVENT_CHANGE = "EVENT_CHANGE"; @@ -87,4 +92,4 @@ BI.MultifileEditor.EVENT_UPLOADSTART = "EVENT_UPLOADSTART"; BI.MultifileEditor.EVENT_ERROR = "EVENT_ERROR"; BI.MultifileEditor.EVENT_PROGRESS = "EVENT_PROGRESS"; BI.MultifileEditor.EVENT_UPLOADED = "EVENT_UPLOADED"; -BI.shortcut("bi.multifile_editor", BI.MultifileEditor); \ No newline at end of file +BI.shortcut("bi.multifile_editor", BI.MultifileEditor); diff --git a/src/base/single/input/file.js b/src/base/single/input/file.js index 76b1406581..142e6e7b71 100644 --- a/src/base/single/input/file.js +++ b/src/base/single/input/file.js @@ -156,7 +156,7 @@ ); xhr.open("post", handler.url + "&filename=" + _global.encodeURIComponent(handler.file.fileName), true); if (!xhr.upload) { - var rpe = {loaded: 0, total: handler.file.fileSize || handler.file.size, simulation: true}; + var rpe = { loaded: 0, total: handler.file.fileSize || handler.file.size, simulation: true }; rpe.interval = setInterval(function () { rpe.loaded += 1024 / 4; if (rpe.total <= rpe.loaded) { @@ -282,7 +282,7 @@ } } if (isFunction(handler.onload)) { - handler.onload(rpe, {responseText: responseText}); + handler.onload(rpe, { responseText: responseText }); } }, target = ["AjaxUpload", (new Date).getTime(), String(Math.random()).substring(2)].join("_"); @@ -403,6 +403,31 @@ return handler; }; + var r1 = /\.([^.]+)$/; // .png + var r2 = /\/([^/]+)$/; // image/png + + /** + * 校验文件类型是否合法,同时兼容旧版形式 + * @param fileName + * @param fileType + * @returns {boolean} + */ + var fileTypeValidate = function (fileName, fileType) { + var mimes = fileType.split(","); + if (mimes[0] === fileType) { + mimes = (fileType + "").split(";"); + } + return BI.some(mimes, function (index, mime) { + var matches; + if (matches = mime.match(r1)) { + return fileName.toLowerCase().indexOf(matches[1]) > -1; + } + if (matches = mime.match(r2)) { + return matches[1] === "*" ? true : fileName.toLowerCase().indexOf(matches[1]) > -1; + } + }); + }; + BI.File = BI.inherit(BI.Widget, { _defaultConfig: function () { var conf = BI.File.superclass._defaultConfig.apply(this, arguments); @@ -415,7 +440,7 @@ name: "", url: "", multiple: true, - accept: "", /** '*.jpg; *.zip'**/ + accept: "", // .png,.pdf,image/jpg,image/* 等 maxSize: -1 // 1024 * 1024 }); }, @@ -428,6 +453,7 @@ } this.element.attr("name", o.name || this.getName()); this.element.attr("title", o.title || ""); + this.element.attr("accept", o.accept); }, created: function () { @@ -490,13 +516,13 @@ self_.hide(); // hide progress bars and enable input file if (200 > xhr.status || xhr.status > 399) { - BI.Msg.toast(BI.i18nText("BI-Upload_File_Error"), {level: "error"}); + BI.Msg.toast(BI.i18nText("BI-Upload_File_Error"), { level: "error" }); self.fireEvent(BI.File.EVENT_ERROR); return; } var error = BI.some(_wrap.attach_array, function (index, attach) { if (attach.errorCode) { - BI.Msg.toast(attach.errorMsg, {level: "error"}); + BI.Msg.toast(attach.errorMsg, { level: "error" }); self.fireEvent(BI.File.EVENT_ERROR, attach); return true; } @@ -522,16 +548,17 @@ var value = item.fileName || (item.fileName = tempFile.split("\\").pop()), ext = -1 !== value.indexOf(".") ? value.split(".").pop().toLowerCase() : "unknown", size = item.fileSize || item.size; - if (wrap.fileType && -1 === wrap.fileType.indexOf("*." + ext)) { + var validateFileType = fileTypeValidate(value, wrap.fileType); + if (!validateFileType) { // 文件类型不支持 - BI.Msg.toast(BI.i18nText("BI-Upload_File_Type_Error"), {level: "error"}); + BI.Msg.toast(BI.i18nText("BI-Upload_File_Type_Error"), { level: "error" }); self.fireEvent(BI.File.EVENT_ERROR, { errorType: 0, file: item }); } else if (wrap.maxSize !== -1 && size && wrap.maxSize < size) { // 文件大小不支持 - BI.Msg.toast(BI.i18nText("BI-Upload_File_Size_Error"), {level: "error"}); + BI.Msg.toast(BI.i18nText("BI-Upload_File_Size_Error"), { level: "error" }); self.fireEvent(BI.File.EVENT_ERROR, { errorType: 1, file: item