You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

文件上传大小校验异常:未选择文件时触发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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:05:04