FileReader
主要用于將文件內(nèi)容讀入內(nèi)存闯狱,通過一系列異步接口,可以在主線程中訪問本地文件抛计『骞拢可以使用File
對象或者Blob
對象來指定所要處理的文件或數(shù)據(jù)。
創(chuàng)建實(shí)例
let reader=new FileReader();
方法
1.reader.readAsText()
readAsText
方法可以將 Blob 或者 File 對象轉(zhuǎn)根據(jù)特殊的編碼格式轉(zhuǎn)化為內(nèi)容(字符串形式)
$("#file").change(function(e){ //input type="file"
let file=e.target.files[0];
if(file){
//讀取本地文件吹截,以gbk編碼方式輸出
var reader = new FileReader();
reader.readAsText(file,"gbk");
reader.onload = function(){
//讀取完畢后輸出結(jié)果
console.log(this.result);
}
}
})
readAsText
讀取文件的單位是字符,故對于文本文件饭弓,只要按規(guī)定的編碼方式讀取即可双饥;而對于媒體文件(圖片、音頻弟断、視頻)咏花,其內(nèi)部組成并不是按字符排列,故采用
readAsText
讀取阀趴,會產(chǎn)生亂碼昏翰,同時也不是最理想的讀取文件的方式。
2.reader.readAsDataURL()
readAsDataURL
方法會讀取指定的Blob
或File
對象刘急。讀取操作完成的時候棚菊,readyState
會變成已完成DONE
,并觸發(fā)loadend
事件叔汁,同時result
屬性將包含一個data:
URL格式的字符串(base64編碼)以表示所讀取文件的內(nèi)容统求。
3.readAsBinaryString
4.readAsArrayBuffer()
FileReader
接口提供的readAsArrayBuffer()
方法用于啟動讀取指定的Blob
或File
內(nèi)容。當(dāng)讀取操作完成時据块,readyState
變成DONE
(已完成)码邻,并觸發(fā)loadend
事件,同時result
屬性中將包含一個ArrayBuffer
對象以表示所讀取文件的數(shù)據(jù)另假。
事件
onload
當(dāng)文件成功讀取時像屋,執(zhí)行l(wèi)oad 事件
abort
當(dāng)讀取已經(jīng)中止事件被觸發(fā)
error
當(dāng)讀取因錯誤而失敗時(例如,因為找不到文件或不可讀)边篮,會觸發(fā)錯誤事件
loadstart
文件讀取操作開始時會觸發(fā)該事件
progress
該
progress
事件被解雇周期性的FileReader
讀取數(shù)據(jù)己莺。
loadend
loadend當(dāng)文件讀取已成功完成時,將觸發(fā)該事件
補(bǔ)加一個readyState
$("#file").change(function(e){
let file=e.target.files[0];
if(file){
//讀取本地文件戈轿,以gbk編碼方式輸出
var reader = new FileReader();
console.log(reader.readyState);//0
reader.readAsDataURL(file);
reader.onload = function(){
//讀取完畢后輸出結(jié)果
console.log(this.result);
console.log(reader.readyState)//2
}
console.log(reader.readyState)//1
}
})
輸出順序也是 0 1 2
0 ->尚未加載任何數(shù)據(jù)
1 ->目前正在加載數(shù)據(jù)凌受。
2 ->整個讀取請求已完成。