file api只能读取用户主动选择的文件,无法访问任意本地路径;通过或拖放获取file对象后,可立即读取name、size、type、lastmodified等元数据,无需filereader异步操作。

File API 不能直接读取任意本地路径的文件,只能获取用户主动选择的文件对象,并从中提取名称、大小、类型等基本信息——这些就是元数据,无需 FileReader 就能立刻拿到。
从 input 获取 File 对象
最常用方式是监听 <input type="file"> 的 change 事件。用户点选文件后,e.target.files 返回一个 FileList,其中每个元素都是只读的 File 实例。
- 必须检查
e.target.files.length > 0,否则[0]会报错 - File 对象本身不是 Blob,但继承自 Blob,因此也具备
size、type、name和lastModified属性 -
name是纯文件名(不含路径),type是浏览器根据扩展名或内容推测的 MIME 类型(可能为空)
直接读取元数据的三个关键属性
拿到 file = e.target.files[0] 后,可立即访问以下字段,无需异步操作:
-
file.name:如
"report.pdf",注意它不包含盘符或目录路径 -
file.size:单位为字节,例如
2048576表示约 2MB -
file.type:常见值如
"image/jpeg"、"text/csv";若无法识别则为空字符串 -
file.lastModified:时间戳(毫秒),可用
new Date(file.lastModified)转为可读日期
元数据的实际用途
这些信息虽简单,却是前端校验和交互的基础:
- 上传前判断文件是否过大:
if (file.size > 10 * 1024 * 1024) alert("文件不能超过 10MB") - 限制类型:
if (!["image/png", "image/jpeg"].includes(file.type)) - 显示友好提示:
`${file.name}(${(file.size/1024).toFixed(1)} KB)` - 结合后续 FileReader 使用:比如知道是 JSON 文件,就调用
readAsText(file, "UTF-8")
拖放场景下同样适用
拖入文件时,e.dataTransfer.files 与 e.target.files 结构完全一致,可复用同一套元数据读取逻辑。
- 别忘了在
dragenter和dragover中调用e.preventDefault(),否则浏览器会尝试打开文件 - 多文件时遍历
e.dataTransfer.files即可,每个项都是标准 File 对象
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











