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

Angular文件上传如何实现10MB大小校验,禁止添加超出上限的附件?

Angular 文件上传总大小校验实现

你现有代码仅判断单个文件是否大于1MB就终止循环,未统计所有已选文件的总大小,也没有达到10MB总大小阈值后阻止添加的逻辑,可按以下代码修改:

// 定义总大小阈值:10MB 对应的标准字节数
readonly MAX_TOTAL_SIZE = 10 * 1024 * 1024;

onFileChangeInfo(event: any){
  // 计算已选中的附件总大小
  const currentTotalSize = this.myFilesInfo.reduce((sum, file) => sum + file.size, 0);
  // 统计本次循环累计添加的文件大小
  let addedSize = 0;

  for (let i = 0; i < event.target.files.length; i++) { 
    const targetFile = event.target.files[i];
    const fileName = targetFile.name;
    const fileSize = targetFile.size;

    // 预判断:已选总大小 + 本次已加大小 + 当前文件大小 是否超出阈值
    if (currentTotalSize + addedSize + fileSize > this.MAX_TOTAL_SIZE) {
      // 此处可自行添加超出大小的提示逻辑,比如调用全局提示组件
      break;
    }
    addedSize += fileSize;
    this.myFilesInfo.push({ name: fileName, size: fileSize });
  }

  // 可选:清空文件选择框的值,解决同一个文件重复选择不触发change事件的问题
  event.target.value = '';
}

核心逻辑说明

  • 提前统计已添加附件的总大小,每次新增文件前做预校验,超出阈值直接终止循环,不会加入超出限制的文件
  • 使用10 * 1024 * 1024计算10MB对应的字节数,比近似值10000000更符合存储单位的标准换算规则
  • 如果需要额外增加单文件大小限制,可在总大小判断前新增单文件阈值校验即可
  • 多文件选择场景下,若本次选中的多个文件累计未超出阈值,会全部添加成功,若累计超出则仅添加未超出阈值的部分

内容的提问来源于stack exchange,提问作者Roberto Rodrigues

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:48:03