在FileReader出現(xiàn)之前,前端的圖片預(yù)覽是這樣實(shí)現(xiàn)的:把本地圖片上傳到服務(wù)器,服務(wù)器把圖片地址返回,并把它替換到圖片元素的src屬性。
這種方法的缺點(diǎn)是:必須要先把圖片上傳到服務(wù)器。那么問題來了,如果上傳的圖片很大,而網(wǎng)速又很慢,這就需要等待很久預(yù)覽圖片才會(huì)顯示出來了,而且,如果用戶預(yù)覽圖片后發(fā)現(xiàn)不太滿意,想重新選擇一張圖片,這時(shí)候還要把已經(jīng)上傳到服務(wù)器上的圖片給刪除掉。
自從有了HTML5的FileReader對象以后,預(yù)覽圖片變得簡單多了,不再需要后臺(tái)的配合,并且JS操作本地文件已經(jīng)成為了可能。這種方法的思路是:通過FileReader.prototype.readAsDataURL()方法把圖片文件轉(zhuǎn)成base64編碼,然后把base64編碼替換到預(yù)覽圖片的src屬性即可。如果想要了解更多關(guān)于FileReader對象的,可以看一下這里:FileReader https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader
下面是使用FileReader進(jìn)行圖片預(yù)覽的簡單demo:
1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 <input type="file"><br> 9 <img src="" height="200" alt="Image preview area..." title="preview-img">10 <script>11 var fileInput = document.querySelector('input[type=file]'),12 previewImg = document.querySelector('img');13 fileInput.addEventListener('change', function () {14 var file = this.files[0];15&n