Get size of the selected file
In the markup below, we have two elements defined by different id attributes.
The id="size" element will be used to display the size of selected file from the id="upload" element.
<input type="file" id="upload" />
<div id="size"></div>
We listen on the change event of the file input, and get the selected files via e.target.files.
The file size in bytes of the selected file can be retrieved from the size property of the first (and only) file.
const fileEle = document.getElementById('upload');
const sizeEle = document.getElementById('size');
fileEle.addEventListener('change', function (e) {
const files = e.target.files;
if (files.length === 0) {
sizeEle.innerHTML = '';
sizeEle.style.display = 'none';
} else {
sizeEle.innerHTML = `${files[0].size} B`;
sizeEle.style.display = 'block';
}
});
Display a readable size
There is a room for improving the output of file size. Instead of displaying in bytes, we can transform it to a readable format in kB, MB, GB, and TB depending on how big it is.
The following formatFileSize helper method is created for that purpose:
const formatFileSize = function (bytes) {
const sufixes = ['B', 'kB', 'MB', 'GB', 'TB'];
const i = Math.floor(Math.log(bytes) / Math.log(1024));
return `${(bytes / Math.pow(1024, i)).toFixed(2)} ${sufixes[i]}`;
};
sizeEle.innerHTML = formatFileSize(files[0].size);
Use case
- Validate the file size before uploading to the server.
Demo
Get size of the selected file
See also