H5中用实现单图本地选择与预览,核心是监听change事件、校验图片类型、用URL.createObjectURL()生成临时地址并赋值给img.src。

在 H5 页面中,用 <input type="file"> 实现单张图片本地选择与预览,核心是监听文件变化、读取文件内容,并用 URL.createObjectURL() 快速生成可显示的临时地址。
1. 基础 HTML 结构
限定只选一张图片,且仅接受常见图片格式:
说明:
-
accept="image/*"过滤非图片文件(用户界面会自动限制,但需前端校验) -
capture="environment"(可选)在移动端优先调起后置摄像头(仅部分安卓/iOS 支持) -
<img alt="H5 中怎么使用 input type="file" 实现单张图片的本地选择与预览" >初始隐藏,选图后才显示
2. JavaScript 监听与预览逻辑
绑定 change 事件,检查文件类型和数量:
注意点:
-
e.target.files是FileList,即使设为单选也需取[0] -
URL.createObjectURL()返回的是浏览器内有效的临时地址,生命周期跟随页面;无需服务器参与 - 不要在设置
src后立刻调用revokeObjectURL,否则图片可能来不及加载就失效
3. 补充:预览前缩略或压缩(可选优化)
如果需要控制预览尺寸或减小内存占用,可用 Canvas 绘制压缩后的图像再转为 blob:
- 创建
<canvas></canvas>,按比例绘制原始图片 - 用
canvas.toBlob(callback, 'image/jpeg', 0.8)生成压缩后的 Blob - 再用
URL.createObjectURL(newBlob)更新预览 - 适合对大图(如手机拍摄)做轻量预览,避免卡顿
4. 兼容性与边界处理
简单兼容建议:
- iOS Safari 对
capture支持较弱,可去掉或降级为普通文件选择 - 老版 Android 浏览器可能不支持
accept,需靠 JS 类型校验兜底 - 用户取消选择时,
e.target.files.length为 0,直接忽略即可 - 若需清除已选文件,可手动设置
input.value = ''


















