在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>編碼