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
相关产品推荐
相关产品推荐

