浏览器预览待上传图片
使用 URL.createObjectURL 和 FileReader 实现图片上传前预览
问题
在用户选择图片后,如何在浏览器中预览待上传的图片?
解答
实现图片预览有两种方式:使用 URL.createObjectURL 或 FileReader。两种方法都需要先从 input 元素的 files 集合中获取文件数据。
方式一:URL.createObjectURL
这种方式会为选择的图片生成一个临时的 blob 对象路径。
function imgChange(img) {
document.querySelector("img").src = window.URL.createObjectURL(img.files[0]);
}
方式二:FileReader
使用 FileReader 读取文件需要四个步骤:
- 创建 FileReader 对象
- 调用
readAsDataURL方法读取文件 - 监听
onload事件(因为文件读取是异步的,需要等待读取完成) - 通过
result属性获取读取结果
function imgChange(img) {
// 创建文件读取对象
const reader = new FileReader();
reader.onload = function (ev) {
document.querySelector("img").src = ev.target.result;
}
// 异步读取文件,结果为 data:url 格式的字符串
reader.readAsDataURL(img.files[0]);
}
关键点
- 文件数据从
input.files[0]获取 URL.createObjectURL生成临时 blob URL,性能更好,但需要手动释放内存FileReader.readAsDataURL返回 base64 格式的 data URL,可直接用于 img 标签- FileReader 是异步操作,需要在
onload回调中获取结果
目录