您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)HTML 5中怎么利用FileAPI對(duì)文件進(jìn)行處理,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
總覽
FileAPI是一些列文件處理規(guī)范的基礎(chǔ),包含最基礎(chǔ)的文件操作的JavaScript接口設(shè)計(jì)。其中最主要的接口定義一共有4個(gè):
◆ FileList接口: 可以用來代表一組文件的JS對(duì)象,比如用戶通過input[type="file"]元素選中的本地文件列表
◆ Blob接口: 用來代表一段二進(jìn)制數(shù)據(jù),并且允許我們通過JS對(duì)其數(shù)據(jù)以字節(jié)為單位進(jìn)行“切割”
◆ File接口: 用來代步一個(gè)文件,是從Blob接口繼承而來的,并在此基礎(chǔ)上增加了諸如文件名、MIME類型之類的特性
◆ FileReader接口: 提供讀取文件的方法和事件
這里有兩點(diǎn)細(xì)節(jié)需要注意:
1. 我們平時(shí)使用input[type="file"]元素都是選中單個(gè)文件,其本身是允許同時(shí)選中多個(gè)文件的,所以會(huì)用到FileList
2. Blob接口和File接口可以返回?cái)?shù)據(jù)的字節(jié)數(shù)等信息,也可以“切割”,但無法獲取真正的內(nèi)容,這也正是FileReader存在的意義,而文件大小不一時(shí),讀取文件可能存在明顯的時(shí)間花費(fèi),所以我們用異步的方式,通過觸發(fā)另外的事件來返回讀取到的文件內(nèi)容
接口描述
這4個(gè)接口其實(shí)并不復(fù)雜,也很好理解(接口中的“#Foo”表示任意Foo類型的對(duì)象):
FileList接口
#FileList[index] // 得到第index個(gè)文件
Blob接口
#Blob.size // 只讀特性,數(shù)據(jù)的字節(jié)數(shù) #Blob.slice(start, length) // 將當(dāng)前文件切割并將結(jié)果返回
File接口
#File.size // 繼承自Blob,意義同上 #File.slice(start, length) // 繼承自Blob,意義同上 #File.name // 只讀屬性,文件名 #File.type // 只讀屬性,文件的MIME類型 #File.urn // 只讀屬性,代表該文件的URN,幾乎用不到,暫且無視
FileReader方法
#FileReader.readAsBinaryString(blob/file) // 以二進(jìn)制格式讀取文件內(nèi)容 #FileReader.readAsText(file, [encoding]) // 以文本(及字符串)格式讀取文件內(nèi)容,并且可以強(qiáng)制選擇文件編碼 #FileReader.readAsDataURL(file) // 以DataURL格式讀取文件內(nèi)容 #FileReader.abort() // 終止讀取操作
FileReader事件
#FileReader.onloadstart // 讀取操作開始時(shí)觸發(fā) #FileReader.onload // 讀取操作成功時(shí)觸發(fā) #FileReader.onloadend // 讀取操作完成時(shí)觸發(fā)(不論成功還是失敗) #FileReader.onprogress // 讀取操作過程中觸發(fā) #FileReader.onabort // 讀取操作被中斷時(shí)觸發(fā) #FileReader.onerror // 讀取操作失敗時(shí)觸發(fā)
FileReader屬性
#FileReader.result // 讀取的結(jié)果(二進(jìn)制、文本或DataURL格式) #FileReader.readyState // 讀取操作的狀態(tài)(EMPTY、LOADING、DONE)
代碼示例
舉例一:控制file控件,讀取其中的第二個(gè)文件,并將其文本內(nèi)容在控制臺(tái)輸出
var input = document.querySelector('input[type="file"]'); // 找到***個(gè)file控件 var firstFile = input.files[0]; // file控件的files特性其實(shí)就是一個(gè)FileList類型的對(duì)象 var secondFile = input.files[1]; // 當(dāng)file控件的multiple特性為true時(shí),我們可以同時(shí)選擇多個(gè)文件,通過input.files[n]可以按序訪問這些文件 var reader = new FileReader(); // 新建一個(gè)FileReader類型的對(duì)象 reader.readAsText(secondFile); // 按文本格式讀取file控件中的第二個(gè)文件 reader.onloadend = function (e) { // 綁定讀取操作完成的事件 console.log(reader.result); // 取得讀取結(jié)果并輸出 };
舉例二:給一個(gè)含utf-8編碼的文本文件file去掉BOM頭信息
var size = file.size; // 先取得文件總字節(jié)數(shù) var result = file.slice(3, size - 3); // 用slice方法去掉開頭的3個(gè)字節(jié)
***,對(duì)FileAPI實(shí)踐的三點(diǎn)注意
1. 由于規(guī)范尚未截稿,#File.urn尚存較大變數(shù),webkit并未實(shí)現(xiàn)此特性
2. #Blob.slice在webkit內(nèi)核中加入了前綴,即#Blob.webkitSlice,且第二個(gè)參數(shù)不是“l(fā)ength”,而是“end”,話句話說,上面的示例二應(yīng)改為file.webkitSlice(3, size)才能生效
3. 規(guī)范中還明確規(guī)定了各種出錯(cuò)處理和異常處理,這些內(nèi)容是同樣重要的:不論對(duì)于一套完備的規(guī)范,還是對(duì)于一個(gè)健壯的程序而言。
上述就是小編為大家分享的HTML 5中怎么利用FileAPI對(duì)文件進(jìn)行處理了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。