如何使用JS从指定文件路径获取文件大小?
获取指定路径文件大小的JavaScript实现方法
JavaScript获取文件大小的实现方式取决于运行环境,以下分两种场景说明:
1. Node.js环境(服务器/本地脚本)
Node.js可以通过内置的fs模块直接读取文件的元信息,从而获取文件大小。提供同步、异步回调、Promise三种实现方式:
同步方式(适合简单脚本)
const fs = require('fs'); try { // 获取文件状态信息 const stats = fs.statSync('my-path/filename'); // stats.size 返回文件大小(单位:字节) const fileSizeBytes = stats.size; // 转换为更易读的单位(可选) const fileSizeKB = (fileSizeBytes / 1024).toFixed(2); const fileSizeMB = (fileSizeBytes / (1024 * 1024)).toFixed(2); console.log(`文件大小:${fileSizeBytes} 字节 | ${fileSizeKB} KB | ${fileSizeMB} MB`); } catch (error) { console.error('读取文件大小失败:', error.message); }
异步回调方式(避免阻塞主线程)
const fs = require('fs'); fs.stat('my-path/filename', (error, stats) => { if (error) { console.error('读取文件大小失败:', error.message); return; } const fileSizeBytes = stats.size; const fileSizeKB = (fileSizeBytes / 1024).toFixed(2); const fileSizeMB = (fileSizeBytes / (1024 * 1024)).toFixed(2); console.log(`文件大小:${fileSizeBytes} 字节 | ${fileSizeKB} KB | ${fileSizeMB} MB`); });
Promise/Async-Await方式(现代异步写法)
const fs = require('fs').promises; async function getFileSize() { try { const stats = await fs.stat('my-path/filename'); const fileSizeBytes = stats.size; const fileSizeKB = (fileSizeBytes / 1024).toFixed(2); const fileSizeMB = (fileSizeBytes / (1024 * 1024)).toFixed(2); console.log(`文件大小:${fileSizeBytes} 字节 | ${fileSizeKB} KB | ${fileSizeMB} MB`); } catch (error) { console.error('读取文件大小失败:', error.message); } } // 调用函数 getFileSize();
2. 浏览器环境
浏览器出于安全限制,无法直接访问本地指定路径的文件,必须由用户主动通过文件选择器上传文件,再通过File对象的size属性获取大小:
<!-- 文件选择器 --> <input type="file" id="filePicker"> <script> document.getElementById('filePicker').addEventListener('change', (event) => { // 获取用户选择的第一个文件 const selectedFile = event.target.files[0]; if (!selectedFile) return; const fileSizeBytes = selectedFile.size; const fileSizeKB = (fileSizeBytes / 1024).toFixed(2); const fileSizeMB = (fileSizeBytes / (1024 * 1024)).toFixed(2); console.log(`文件大小:${fileSizeBytes} 字节 | ${fileSizeKB} KB | ${fileSizeMB} MB`); }); </script>
内容的提问来源于stack exchange,提问作者Saeid
相关产品推荐
相关产品推荐

