1. 程式人生 > 實用技巧 >第四篇:前端讀取檔案 | FileReader 物件及其屬性

第四篇:前端讀取檔案 | FileReader 物件及其屬性

這篇文章是這個分類下的第四篇隨筆了,之前可能對檔案上傳還不是很清晰,寫到這篇,也就明白套路了。

ps:這就是寫部落格的好處。

第一步:定義一個input標籤type="file"

覺得 <input/> 樣式難看又難改的,請看一下這個分類下的第三篇隨筆

<inputtype="file"onChange={(ev)=>this.getFiles(ev.target.files)}/> <spanid="textInner"></span>

第二步:定義一個 getFiles 的方法,讀取上傳的檔案。

  getFiles = (files) => {
    const textInner 
= document.getElementById("textInner"); // 獲取一個標籤,把讀取的內容插進去 if (files.length) { var file = files[0]; var reader = new FileReader(); // new一個FileReader例項 console.log(reader, file) if (/text+/.test(file.type)) { // 判斷檔案型別,是不是text型別 reader.onload = function () { textInner.innerText
= this.result } reader.readAsText(file); } else if (/image+/.test(file.type)) { // 判斷檔案是不是imgage型別 reader.onload = function () { textInner.innerHTML = '<img src="' + this.result + '"/>' } reader.readAsDataURL(file); } } }

到這裡,讀取檔案就結束了,下面來了解一下 html5 的FileReader 物件及其屬性

FileReader介面的方法:

屬性 引數 介紹
readAsBinaryString file 將檔案讀取為二進位制編碼
readAsText file,[encoding] 將檔案讀取為文字,其中第二個引數是文字的編碼方式,預設值為 UTF-8
readAsDataURL file 將檔案讀取為DataURL
abort 中斷讀取操作(無論讀取成功或失敗,方法並不會返回讀取結果,這一結果儲存在result屬性中)

相關事件:

onabort 中斷
onerror 出錯
onloadstart   開始
onprogress 正在讀取
onload 成功讀取
onloadend 讀取完成,無論成功失敗

檔案一旦開始讀取,無論成功或失敗,例項的 result 屬性都會被填充。如果讀取失敗,則 result 的值為 null ,否則即是讀取的結果。

如果讀取檔案過大的話fileReader允許分段讀取檔案;

var blob_file;
if(file.webkitSlice) {  //chrome
        blob_file= file.webkitSlice(start, end + 1, 'text/plain;charset=UTF-8');
} else if(file.mozSlice) { //Firefox
        blob_file= file.mozSlice(start, end + 1, 'text/plain;charset=UTF-8');
}

順便嘮叨一下base64編碼的優缺點:

優點:

  1.減少了http請求。

  2.沒有跨域的問題。

  3.直接放在路徑裡不需要清理快取。

缺點:

  1.IE6/7不支援(不過這個問題不大);

  2.base64本質上是將圖片以二進位制的字母展示,字元量過大無形中增加了css/html檔案的大小;


申明:此文章只供本人學習用,不做任何商業目的,部分內容來自網際網路。