触发UploadCollection前验证文件名:拦截含逗号文件并终止上传
解决方案
方法一:文件添加阶段(change事件)提前拦截校验
这是最彻底的处理方式,文件刚被添加到UploadCollection时就完成校验,直接移除无效文件并终止所有上传流程,避免进入上传队列。
修改控制器中的onUploadChange方法:
onUploadChange: function(oEvent) { const aAddedFiles = oEvent.getParameter("files"); const oUploadCollection = this.byId("UploadCollection"); const aInvalidFiles = aAddedFiles.filter(file => file.name.includes(",")); if (aInvalidFiles.length > 0) { // 弹出错误提示 sap.m.MessageBox.error("检测到包含逗号的文件名,此类文件不允许上传,请重新选择。"); // 移除所有无效文件 aInvalidFiles.forEach(invalidFile => oUploadCollection.removeFile(invalidFile)); // 终止所有正在进行的上传任务 oUploadCollection.terminateUpload(); } }
方法二:单个文件上传前(beforeUploadStarts)拦截并终止全部上传
若需在上传前校验,可通过preventDefault()阻止当前文件上传,同时终止所有上传任务,但这种方式可能存在部分文件已启动上传的情况,不如方法一高效:
修改onBeforeUploadStarts方法:
onBeforeUploadStarts: function(oEvent) { const sFileName = oEvent.getParameter("fileName"); const oUploadCollection = this.byId("UploadCollection"); if (sFileName.includes(",")) { // 阻止当前文件上传 oEvent.preventDefault(); // 弹出错误提示 sap.m.MessageBox.error(`文件 ${sFileName} 包含逗号,不允许上传,已终止全部上传任务。`); // 终止所有上传任务 oUploadCollection.terminateUpload(); return; } // 保留原有的请求头参数添加逻辑 const slug = `${sFileName},${this.sRequestID},${this.oData.VendNum},${reqHeaderTms},RFU`; const oCustomerHeaderSlug = new sap.m.UploadCollectionParameter({ name: "slug", value: slug }); oEvent.getParameters().addHeaderParameter(oCustomerHeaderSlug); }
关键说明
beforeUploadStarts默认不会阻止上传,必须调用oEvent.preventDefault()才能终止当前文件的上传流程;但批量上传场景下,仅阻止单个文件无法终止全部上传,因此需要额外调用terminateUpload()方法终止所有任务。- 优先选择
change事件校验:该事件在文件被添加到组件列表时触发,此时还未启动上传流程,能更高效地拦截无效文件,避免发起不必要的上传请求。
内容的提问来源于stack exchange,提问作者Fahmi Eshaq
相关产品推荐
相关产品推荐

