Phân Biệt Đơn Vị Kích Thước File: Bytes, KB, MB, GB (Thập Phân vs Nhị Phân)
Sự khác biệt giữa hệ thập phân (1MB = 1.000.000 bytes) và hệ nhị phân (1MiB = 1.048.576 bytes). Cách định dạng dung lượng chuẩn xác.
Một trong những nguồn gây lỗi phổ biến nhất trong xác thực tệp là sự nhầm lẫn giữa đơn vị kích thước thập phân (SI, cơ số 10) và nhị phân (IEC, cơ số 2). Biết liệu máy chủ hoặc nhà cung cấp đám mây của bạn tính 1MB là 1.000.000 byte hay 1.048.576 byte sẽ ngăn chặn các lỗi ranh giới khó phát hiện.
Tiền Tố Thập Phân (SI) vs Nhị Phân (IEC)
| Đơn vị | Tiền tố | Cơ số 10 (Thập phân / Ổ cứng / S3) | Tiền tố nhị phân | Cơ số 2 (RAM / OS / Windows) |
|---|---|---|---|---|
| Kilo | KB | 1.000 byte (10^3) | KiB | 1.024 byte (2^10) |
| Mega | MB | 1.000.000 byte (10^6) | MiB | 1.048.576 byte (2^20) |
| Giga | GB | 1.000.000.000 byte (10^9) | GiB | 1.073.741.824 byte (2^30) |
Tải file PDF test chính xác 10MB (10.485.760 byte) để kiểm thử giới hạn ranh giới trong validator.
Tải File Mẫu 10MB PDF →Hàm Định Dạng Kích Thước Tệp Chính Xác Bằng TypeScript
export function formatBytes(bytes: number, decimals = 2, useBinary = true): string {
if (bytes === 0) return '0 Bytes';
const k = useBinary ? 1024 : 1000;
const dm = decimals < 0 ? 0 : decimals;
const sizes = useBinary
? ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB']
: ['Bytes', 'KB', 'MB', 'GB', 'TB'];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
}
// Ví dụ kết quả:
// formatBytes(1048576, 2, true) => "1 MiB"
// formatBytes(1000000, 2, false) => "1 MB"
Lời Khuyên Thực Tiễn Cho Quy Tắc Tải Lên Tệp
Khi cấu hình giới hạn tải lên trong ứng dụng web, hãy sử dụng rõ ràng byte thô trong schema cấu hình (ví dụ: maxSizeBytes: 10485760) thay vì chuyển đổi chuỗi động.
Nguyễn Đại Long
Tác GiảBackend Lead • Chuyên gia Kiến trúc Hệ thống Phân tán & Lưu trữ Đám mây
Hơn 4 năm kinh nghiệm thiết kế các hệ thống xử lý tệp tải lên thông lượng lớn, tối ưu hóa cơ sở dữ liệu và hạ tầng phân tán Cloudflare R2 / AWS S3. Người sáng lập FileDummy và Mạng lưới Hệ sinh thái NDL.
Bài viết này có hữu ích không?
Bấm Thích để ủng hộ tác giả và giúp bài viết lan tỏa tới cộng đồng lập trình viên.
Thảo Luận Kỹ Thuật & Đóng Góp Ý Kiến (0)
Chia sẻ kết quả benchmark, phản hồi các trường hợp biên hoặc đặt câu hỏi chuyên môn.
Chưa có bình luận nào. Hãy là lập trình viên đầu tiên bắt đầu cuộc thảo luận!
Câu Hỏi Thường Gặp (FAQ)
Why does Windows show a different file size than the actual size?▾
Windows Explorer shows size on disk (rounded up to the cluster size, typically 4096 bytes) alongside the actual file size. A 1-byte file has 1 byte size but 4 KB size on disk. Also, Windows uses 1 KB = 1,024 bytes while storage manufacturers use 1 KB = 1,000 bytes.
What is the difference between KB and KiB?▾
1 KB (kilobyte, SI standard) = 1,000 bytes. 1 KiB (kibibyte, IEC standard) = 1,024 bytes. Operating systems historically use KB to mean 1,024 bytes (binary), causing ambiguity. IEC introduced KiB/MiB/GiB for clarity. In programming, always be explicit about which base you are using.
How many bytes is 1 GB exactly?▾
Decimal (storage manufacturers): 1 GB = 1,000,000,000 bytes. Binary (OS convention): 1 GiB = 1,073,741,824 bytes. This 7.4% difference explains why a 1TB hard drive shows as 931 GB in Windows. FileDummy.dev uses binary sizes for all files.