在FileReader出现以前,前端的图片预览是这样实现的:把本地图片上传到服务器,服务器把图片地址返回,并把它替换到图片元素的src属性。html
这种方法的缺点是:必需要先把图片上传到服务器。那么问题来了,若是上传的图片很大,而网速又很慢,这就须要等待好久预览图片才会显示出来了,并且,若是用户预览图片后发现不太满意,想从新选择一张图片,这时候还要把已经上传到服务器上的图片给删除掉。前端
自从有了HTML5的FileReader对象之后,预览图片变得简单多了,再也不须要后台的配合,而且JS操做本地文件已经成为了可能。这种方法的思路是:经过FileReader.prototype.readAsDataURL()方法把图片文件转成base64编码,而后把base64编码替换到预览图片的src属性便可。若是想要了解更多关于FileReader对象的,能够看一下这里:FileReader https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader服务器
下面是使用FileReader进行图片预览的简单demo:this
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<input type="file"><br>
<img src="" height="200" alt="Image preview area..." title="preview-img">
<script>
var fileInput = document.querySelector('input[type=file]'),
previewImg = document.querySelector('img');
fileInput.addEventListener('change', function () {
var file = this.files[0];
var reader = new FileReader();
// 监听reader对象的的onload事件,当图片加载完成时,把base64编码賦值给预览图片
reader.addEventListener("load", function () {
previewImg.src = reader.result;
}, false);
// 调用reader.readAsDataURL()方法,把图片转成base64
reader.readAsDataURL(file);
}, false);
</script>
</body>
</html>编码