JavaScript无法直接读写本地文件系统,需通过File API和FormData实现用户触发的文件上传与预览:用获取File对象,URL.createObjectURL()预览图片,FileReader读取文本,FormData配合fetch上传至服务端。
JavaScript 本身不能直接读写本地文件系统(出于安全限制),但可以通过浏览器提供的 File API 和 FormData 等接口,实现用户主动选择文件后的上传与预览功能。核心在于“用户触发 + 浏览器沙箱内操作”,不涉及服务端逻辑,但需前后端配合完成真正上传。
使用 让用户选择文件,通过 change 事件拿到 FileList 对象:
示例:
@@##@@
对图片类文件,可用 URL.createObjectURL() 创建临时内存 URL,快速显示在 中:
URL.revokeObjectURL() 释放内存(尤其多图场景)补充代码:
if (file && file.type.startsWith('image/')) {
const url = URL.createObjectURL(file);
preview.src = url;
// 清理:在下次选择或页面卸载时释放
preview.onload = () => URL.revokeObjectURL(url);
}
文本类(如 .txt、.json、.csv)可读取内容并展示在 或 中;PDF 可嵌入 或用 PDF.js 渲染:
FileReader.readAsText() 读取文本内容(注意编码,默认 UTF-8)FileReader.readAsDataURL() 获取 base64 字符串(适合小文件,如图标、简历)文本预览示例:
const reader = new FileReader();
reader.onload = (e) => {
document.getElementById('textPreview').textContent = e.target.result;
};
reader.readAsText(file, 'UTF-8');
用 FormData 包装文件,配合 fetch 或 XMLHttpRequest 发送:
FormData.append('file', file) 即可添加单个文件;支持多个同名字段模拟多文件upload.onprogress 获取上传进度(XMLHttpRequest 更易控制)fetch 上传片段:
const formData = new FormData();
formData.append('file', file);
fetch('/api/upload', {
method: 'POST',
body: formData,
})
.then(res => res.json())
.then(data => console.log('上传成功:', data))
.catch(err => console.error('上传失败:', err));