input標籤上傳圖片到後端前用H5的FileReader 方法實現圖片的顯示
阿新 • • 發佈:2019-01-30
要想在頁面上顯示上傳的本地圖片,以前我們的做法是將選擇的圖片檔案上傳至後端伺服器,後端對其進行儲存,再將圖片的URL返回到前端,前端通過介面主要是將檔案讀入記憶體,並提供相應的方法,來讀取檔案中的資料,將讀取的資料放到result中,通多讀取到資料就能實現本地圖片不需上傳就可以顯示。目前高階瀏覽器實現了FileReader介面。
這個URL來顯示圖片。而H5的FileReader介面支援本地預覽,FileReader
例如:(html)
<form action=""><!--action屬性值資料傳到後端的路徑--> <label style="color:red;" for="up_img">上傳圖片</label><input accept="image/*" type="file" id="up_img" onchange="fileUpLoad(this);"/> <div id="showImg"> </div> </form>
js)
<script type="text/javascript"> var imgCont = document.getElementById("showImg"); var ipt = document.getElementById("up_img"); function fileUpLoad(_this){ var file = _this.files[0]; if(!/image\/\w+/.test(file.type)){ //html中已經用accept='image/*'限制上傳的是圖片了,此處判斷可省略 alert("檔案必須為圖片!"); return false; } if(!FileReader){ alert("你的瀏覽器不支援H5的FileReader"); ipt.setAttribute("disabled","disabled");//瀏覽器不支援禁用input type='file'檔案上傳標籤 return; } var fileReader = new FileReader(); fileReader.readAsDataURL(file);//將檔案讀取為Data URL 讀取結果放在result中 fileReader.onload = function(e){ var img = '<img src="'+this.result+'"/>'; imgCont.innerHTML = img; console.log(this.result); } } </script>
通過上面的方法:就實現了圖片不需要上傳就可以顯示本地圖片
FileReader的事件方法引數列表:
事件,方法,引數 | 描述 |
方法 | |
1)abort | 中斷讀取 |
2)readAsText(file,[enconding:string]) | 將檔案讀取為文字,該方法有兩個引數,第二個引數是檔案編碼格式,預設的是UTF-8,方法很容易理解,將檔案以文字方式讀取, 讀取結果就是這個文字檔案得內容。 |
3)readAsBinaryString(file) | 將檔案讀取為二進位制字串,通常將它傳給後端,後端將通過該欄位儲存檔案 |
4)readAsDataURL(file) | 程式中用到的方法,該方法將檔案讀取為data:開頭的字串,這段字串的實質就是Data URL, Data URL是一種將小檔案直接嵌入到文件的方案,這裡的小檔案通常是指html和影象等檔案 |
事件: | 描述: |
1》onabort/abort | 中斷時觸發 |
2》onerror/error | 出錯時觸發 |
3》onloadstart/loadstart | 讀取開始時觸發 |
4》onload/load | 檔案讀取成功完成時觸發 |
5》onloadend/loadend | 檔案讀取成功完成時觸發,無論成功Or失敗 |
6》onprogress/progress | 檔案讀取中 |
謝謝