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

AngularJS中.size获取文件大小不准确问题咨询

解决AngularJS文件大小验证不准确的问题

问题核心原因

你遇到的问题是字节与MB的换算标准混淆:

  • 你设置的maxUploadSize = 100000000是十进制的100MB(按1MB=1000×1000字节计算),但浏览器和操作系统计算文件大小采用的是二进制标准:1MB=1024×1024=1048576字节。
  • 你提到的97657KB文件,按二进制换算为97657×1024=100000768字节(和你实际获取的100000249字节接近,属于文件实际大小的正常差异),这个值超过了十进制的100000000阈值,所以触发了错误提示,但实际上该文件的二进制大小约为95.36MB(100000249÷1048576≈95.36),远小于你预期的100MB。

修复方案

1. 统一采用二进制换算标准(推荐)

将maxUploadSize修正为二进制标准的100MB,确保验证逻辑和系统文件大小计算规则一致:

function (files) {
    // 二进制标准的100MB:100 * 1024 * 1024 = 104857600字节
    const maxUploadSize = 100 * 1024 * 1024;
    const byteToMb = maxUploadSize / (1024 * 1024);
    
    angular.forEach(files, function (value, key) {
        // 验证文件大小
        if (value.size > maxUploadSize) {
            alert(`文件: ${value.name} 过大,必须小于 ${byteToMb}Mb`);
            toastr.error(`文件: ${value.name} 过大,必须小于 ${byteToMb}Mb`);
        }
    });
}

2. 若需采用十进制标准(如适配第三方存储计费规则)

如果业务要求必须按十进制(1MB=1000×1000字节)判断,需将文件大小也转换为十进制MB后再对比:

function (files) {
    // 十进制标准的100MB:100 * 1000 * 1000 = 100000000字节
    const maxUploadSize = 100 * 1000 * 1000;
    const byteToMb = maxUploadSize / (1000 * 1000);
    
    angular.forEach(files, function (value, key) {
        // 将文件大小转换为十进制MB
        const fileSizeMb = value.size / (1000 * 1000);
        if (fileSizeMb > byteToMb) {
            alert(`文件: ${value.name} 过大,必须小于 ${byteToMb}Mb`);
            toastr.error(`文件: ${value.name} 过大,必须小于 ${byteToMb}Mb`);
        }
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:22:10