在博客園註冊賬號有些天了,感覺有些許欣慰,自己寫的東西有人在看,有人在評論很是開心。(ps: 滿足一下虛榮心吧!) 廢話不多說了,說一下今天給大家分享的是 html5上傳圖片。我們是在移動端使用的,但是這個在pc上也通用相容性我只在谷歌測試過。之前一直用的angular寫的《用HTML5的File ...
在博客園註冊賬號有些天了,感覺有些許欣慰,自己寫的東西有人在看,有人在評論很是開心。(ps: 滿足一下虛榮心吧!)
廢話不多說了,說一下今天給大家分享的是 html5上傳圖片。我們是在移動端使用的,但是這個在pc上也通用相容性我只在谷歌測試過。之前一直用的angular寫的《用HTML5的File API做上傳圖片預覽能》。今天摒棄angular的東西分享一個html5 + js 圖片上傳案例。那麼今天還是按照一定的步驟來講吧。

HTML 上傳圖片
HTML
第一步創建html,我們在頁面中放置一個文件選擇的input#upload(PS:偷懶一下,這裡就不再次寫案例了直接複製的我們的頁面)
<div class="con4"> <span class="btn upload">上傳<input type="file" class="upload_pic" id="upload" /></span> </div>
CSS
註:css 寫的有些亂哈,看不懂的可以問我,或者直接自己寫一下就ok。
.con4{ width: 80%; height: auto; overflow: hidden; margin: 15% auto 0 auto; color: #FFFFFF; } .con4 .btn{ width: 45%; height: 40px; line-height: 40px; text-align: center; background: #d8b49c; display: block; font-size: 16px; border-radius: 5px; } .upload{ float: left; position: relative; } .upload_pic{ display: block; width: 100%; height: 40px; position: absolute; left: 0; top: 0; opacity: 0; border-radius: 5px; }
Javascript
通過getElementById獲取節點,判斷瀏覽器的相容性,對於不支持FileReader介面的瀏覽器將給出一個提示並禁用input,否則監聽input的change事件。
//獲取上傳按鈕 var input1 = document.getElementById("upload"); if(typeof FileReader==='undefined'){ //result.innerHTML = "抱歉,你的瀏覽器不支持 FileReader"; input1.setAttribute('disabled','disabled'); }else{ input1.addEventListener('change',readFile,false); }
然後,當file_input的change事件觸發時,調用函數readFile()。在readFile中,我們首先獲取file對象,然後通過file的type屬性來檢測文件類型,我們當然只允許選擇圖像類型的文件,然後我們new一個FileReader實例,並調用readAsDataURL方法來讀取選中的圖像文件,最後在onload事件中,獲取到成功讀取的文件內容,並以插入一個img節點的方式顯示選中的圖片。
function readFile(){ var file = this.files[0]; if(!/image\/\w+/.test(file.type)){ alert("文件必須為圖片!"); return false; } var reader = new FileReader(); reader.readAsDataURL(file); //當文件讀取成功便可以調取上傳的介面,想傳哪裡傳哪裡(PS: 你們可以把你們的靚照偷偷發給我!) reader.onload = function(e){ var data = this.result.split(','); var tp = (file.type == 'image/png')? 'png': 'jpg'; var a = data[1]; //需要上傳到伺服器的在這裡可以進行ajax請求 ... ... } };
寫到這裡我們已經完成了圖片上傳的功能了,大家有興趣的自己動手嘗試一下,不懂的地方或者我寫錯的地方一定要找我哦。
FileReader的方法和事件
參數/事件 | 描述 |
方法 | |
abort | 中斷讀取 |
readAsText(file, [encoding]) | 將文件讀取為文本 該方法有兩個參數,其中第二個參數是文本的編碼方式,預設值為 UTF-8。這個方法非常容易理解,將文件以文本方式讀取,讀取的結果即是這個文本文件中的內容。 |
readAsBinaryString(file) | 將文件讀取二進位碼 通常我們將它傳送到後端,後端可以通過這段字元串存儲文件 |
readAsDataURL(file) | 將文件讀取為DataURL 將文件讀取為一串Data URL字元串,將小文件以一種特殊格式的URL地址直接讀入頁面。小文件指圖像與html等格式的文件。 |
事件 | |
onabort | 數據讀取中斷時觸發 |
onerror | 數據讀取出錯時觸發 |
onloadstart | 數據讀取開始時觸發 |
onload | 數據讀取成功完成時觸發 |
onloadend | 數據讀取完成時觸發,無論成功失敗 |
祝大家學習愉快!終於寫完了估計還是有錯別字的。大家有不同見解的記得給我留言哦![小月博客]