前端读取用户本地文件并转换为Base64编码的实现方案,以下是完整可直接运行的代码(适配现代浏览器),包含核心逻辑、注释和注意事项:
一、核心实现代码(最常用:用户选择文件转Base64)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>本地文件转Base64</title> </head> <body> <input type="file" id="fileInput" accept="*/*"> <div style="margin-top: 20px;"> <h4>Base64结果:</h4> <textarea id="base64Result" rows="10" cols="80"></textarea> </div>
<script> const fileInput = document.getElementById('fileInput'); const base64Result = document.getElementById('base64Result');
fileInput.addEventListener('change', function (e) { const file = e.target.files[0]; if (!file) return;
const reader = new FileReader();
reader.onload = function (event) { const base64Str = event.target.result; base64Result.value = base64Str; console.log('Base64编码:', base64Str); const pureBase64 = base64Str.split(',')[1]; console.log('纯Base64编码(无前缀):', pureBase64); };
reader.onerror = function (error) { console.error('文件读取失败:', error); alert('文件读取失败,请重试!'); };
reader.readAsDataURL(file); }); </script> </body> </html>
|
二、关键API说明
| API/方法 |
作用 |
input[type="file"] |
让用户选择本地文件,files 属性获取选中的文件列表 |
FileReader |
前端读取本地文件的核心对象,支持多种读取方式 |
reader.readAsDataURL(file) |
将文件读取为 Base64 编码的 DataURL(包含文件类型前缀) |
reader.onload |
文件读取成功后的回调,event.target.result 为 Base64 结果 |
reader.onerror |
文件读取失败的回调(如文件损坏、权限问题) |
三、进阶场景:指定文件类型 + 大小限制
如果需要限制仅读取图片/文档,或限制文件大小,可修改代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| fileInput.addEventListener('change', function (e) { const file = e.target.files[0]; if (!file) return;
const allowTypes = ['image/jpeg', 'image/png', 'image/gif']; if (!allowTypes.includes(file.type)) { alert('仅支持JPG/PNG/GIF图片!'); return; }
const maxSize = 2 * 1024 * 1024; if (file.size > maxSize) { alert('文件大小不能超过2MB!'); return; }
const reader = new FileReader(); reader.onload = function (event) { base64Result.value = event.target.result; }; reader.readAsDataURL(file); });
|
四、注意事项
- 兼容性:
FileReader 兼容所有现代浏览器(Chrome/Firefox/Safari/Edge),无需兼容处理;
- Base64 前缀:
readAsDataURL 返回的结果包含 data:文件类型;base64, 前缀,如需纯编码可通过 split(',')[1] 截取;
- 文件大小:大文件(如100MB+)转Base64会占用大量内存,建议仅对小文件(如图片、小文档)使用;
- 安全限制:前端无法主动读取本地文件,必须由用户通过
<input> 手动选择(浏览器安全策略);
- 常见用途:Base64可用于图片预览、小文件上传(后端解码)、本地数据缓存等。
总结
关键点回顾
- 核心流程:
input选择文件 → FileReader 实例化 → readAsDataURL 读取 → onload 获取Base64;
- 可通过
file.type/file.size 限制文件类型和大小;
- Base64结果默认带前缀,按需截取纯编码部分;
- 前端仅能读取用户主动选择的文件,无法静默读取本地文件(安全限制)。
直接复制核心代码即可运行,替换文件类型/大小限制逻辑可适配不同业务场景。