JavaScript浏览器File API无法直接读取任意本地文件路径,仅能通过用户主动选择(如<input type="file">或拖放)获取File对象;File继承Blob并含name等属性;须用FileReader异步读取,支持readAsText()和readAsArrayBuffer();大文件需slice分片处理;读取后可用于JSON解析、图片预览、CSV渲染或上传校验。

JavaScript 浏览器 File API 本身不能直接读取任意本地文件路径(比如 C:\xxx\file.txt),这是出于安全限制 —— 浏览器不允许脚本随意访问用户硬盘。它只能通过用户主动选择的文件(例如通过 <input type="file"> 或拖放)来读取内容。
通过 <input type="file"> 获取文件对象
用户点击选择文件后,input.files 返回一个 FileList,其中每个项都是 File 对象(继承自 Blob):
-
File是特殊的Blob,额外包含name、lastModified等属性 - 必须由用户触发(如点击、拖放),不能用 JS 自动设置
input.value或调用click()模拟选择(现代浏览器会拒绝)
用 FileReader 异步读取文件内容
FileReader 是核心工具,支持多种读取方式,常用的是 readAsText() 和 readAsArrayBuffer():
-
reader.readAsText(file, 'UTF-8'):读为字符串,适合文本文件(.txt、.json、.csv 等) -
reader.readAsArrayBuffer(file):读为二进制缓冲区,适合图片、音频、PDF 等需进一步处理的文件 - 监听
load事件获取结果:reader.result就是读出的内容 - 错误时触发
error事件,可用reader.error查看原因
读取大文件或分块处理
对于大文件(如几百 MB),避免一次性加载到内存:
立即学习“Java免费学习笔记(深入)”;
- 用
slice()方法切片:file.slice(start, end)返回新的Blob - 分多次调用
readAsArrayBuffer(),配合进度计算(reader.onprogress可获已读字节数) - 注意:
onprogress并非所有浏览器都稳定支持,更可靠的方式是手动分片 + 计数
读取后常见用途示例
拿到内容后可灵活使用:
- 解析 JSON:
JSON.parse(reader.result)(确保是合法 JSON) - 显示图片:
URL.createObjectURL(file)直接生成临时 URL 给<img> - 预览 CSV:
reader.result按行分割,渲染表格 - 上传前校验:检查文件类型(
file.type)、大小(file.size)、内容结构等


















