文件上传大小校验异常:未选择文件时触发size is undefined错误
解决文件上传校验时未选文件出现的"size is undefined"错误
问题根源很直接:未选择文件时,this.files[0]本身就是undefined,你直接去访问它的size属性,自然会抛出"undefined"错误。得先确认文件是否存在,再去读取大小。
修复后的代码如下:
$(document).on('change', '#fileUpload', function(e) { // 先判断是否有选中文件 const hasFile = this.files.length > 0; let fileSize = 0; if (hasFile) { fileSize = this.files[0].size; // 把15MB转成数字常量,可读性更强 const MAX_SIZE = 15 * 1024 * 1024; // 等价于15728640字节 if (fileSize > MAX_SIZE) { Swal.fire({ icon: 'error', title: 'Oops...', text: "文件过大,最大允许上传15MB的文件" }); document.getElementById('SubmitButton_ID').disabled = true; } else { document.getElementById('SubmitButton_ID').disabled = false; } } else { // 未选文件时启用提交按钮(可根据实际需求调整为禁用) document.getElementById('SubmitButton_ID').disabled = false; } });
关键优化点:
- 先通过
this.files.length > 0判断是否有选中文件,彻底避免直接访问this.files[0]导致的报错 - 用
15 * 1024 * 1024代替硬编码的15728640,代码可读性大幅提升 - 将文件大小和最大值都以数字类型比较,规避原代码中字符串比较的潜在逻辑问题
- 变量名更语义化,比如
fileSize、MAX_SIZE,后续维护更方便
这段代码也覆盖了用户选文件后又取消选择的场景——此时this.files.length会变回0,自动进入else分支处理逻辑。
内容的提问来源于stack exchange,提问作者SweetTooth
相关产品推荐
相关产品推荐

