前端文件上传的核心实现是通过HTML的<input type="file">
元素结合JavaScript的FormData
对象,将文件以二进制流形式发送至后端服务器。关键亮点包括:支持多格式文件筛选、大文件切片上传、实时进度显示及断点续传功能,同时需注意安全性和用户体验优化。
-
基础文件上传
使用<input type="file">
获取用户文件,通过FormData
封装数据并设置enctype="multipart/form-data"
,利用fetch
或XMLHttpRequest
发送至后端接口。例如:javascript复制
const formData = new FormData(); formData.append('file', fileInput.files[0]); fetch('/upload', { method: 'POST', body: formData });
-
大文件优化处理
- 切片上传:通过
File.slice()
将大文件分割为多个片段,并发上传以提高效率。例如每10MB为一个分片,上传完成后由后端合并。 - 断点续传:记录已上传分片的MD5哈希,网络中断后仅需重传缺失部分。
- 切片上传:通过
-
交互与安全
- 实时预览:通过
FileReader
读取图片为DataURL,显示缩略图。 - 格式限制:校验文件类型(如
file.type.includes('image/')
)和大小(如file.size < 10MB
),避免恶意上传。
- 实时预览:通过
-
高级场景扩展
- 云存储集成:如Google云或腾讯云COS,通过SDK直传文件至云端存储桶。
- 进度监控:利用
axios
或XMLHttpRequest
的progress
事件显示上传百分比。
前端文件上传需兼顾功能性与健壮性,从基础表单到复杂的分片策略,核心在于高效传输与用户友好。实际开发中应根据业务需求选择方案,并注重错误处理与日志记录。