HTML5之FIle api
在眾多HTML5規(guī)范中,有一部分規(guī)范是跟文件處理有關(guān)的,在早期的瀏覽器技術(shù)中,處理小量字符串是js最擅長(zhǎng)的處理之一。但文件處理,尤其是二進(jìn)制文件處理,一直是個(gè)空白。在一些情況下,我們不得不通過(guò)Flash/ActiveX/NP插件或云端的服務(wù)器處理較為復(fù)雜或底層的數(shù)據(jù)。今天,HTML5的一系列新規(guī)范正在致力于讓瀏覽器具備更強(qiáng)大的文件處理能力。
今天要介紹的FileAPI,就是為解決這類問(wèn)題而生的。
總覽
FileAPI是一些列文件處理規(guī)范的基礎(chǔ),包含最基礎(chǔ)的文件操作的JavaScript接口設(shè)計(jì)。其中最主要的接口定義一共有4個(gè):
◆ FileList接口: 可以用來(lái)代表一組文件的JS對(duì)象,比如用戶通過(guò)input[type="file"]元素選中的本地文件列表
◆ Blob接口: 用來(lái)代表一段二進(jìn)制數(shù)據(jù),并且允許我們通過(guò)JS對(duì)其數(shù)據(jù)以字節(jié)為單位進(jìn)行“切割”
◆ File接口: 用來(lái)代步一個(gè)文件,是從Blob接口繼承而來(lái)的,并在此基礎(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ù)等信息,也可以“切割”,但無(wú)法獲取真正的內(nèi)容,這也正是FileReader存在的意義,而文件大小不一時(shí),讀取文件可能存在明顯的時(shí)間花費(fèi),所以我們用異步的方式,通過(guò)觸發(fā)另外的事件來(lái)返回讀取到的文件內(nèi)容
接口描述
這4個(gè)接口其實(shí)并不復(fù)雜,也很好理解(接口中的“#Foo”表示任意Foo類型的對(duì)象):
FileList接口
Blob接口
File接口
FileReader方法
FileReader事件
FileReader屬性
代碼示例
舉例一:控制file控件,讀取其中的第二個(gè)文件,并將其文本內(nèi)容在控制臺(tái)輸出
舉例二:給一個(gè)含utf-8編碼的文本文件file去掉BOM頭信息
最后,對(duì)FileAPI實(shí)踐的三點(diǎn)注意
1. 由于規(guī)范尚未截稿,#File.urn尚存較大變數(shù),webkit并未實(shí)現(xiàn)此特性
2. #Blob.slice在webkit內(nèi)核中加入了前綴,即#Blob.webkitSlice,且第二個(gè)參數(shù)不是“length”,而是“end”,話句話說(shuō),上面的示例二應(yīng)改為file.webkitSlice(3, size)才能生效
3. 規(guī)范中還明確規(guī)定了各種出錯(cuò)處理和異常處理,這些內(nèi)容是同樣重要的:不論對(duì)于一套完備的規(guī)范,還是對(duì)于一個(gè)健壯的程序而言。由于篇幅有限,這部分就不細(xì)說(shuō)了,大家可以在W3C官網(wǎng)自由查閱
推薦文章
2025-01-18
2024-11-28
2024-11-09
2024-10-25
2024-06-25
2024-01-04
2023-11-06
2023-10-30
2023-10-13
2023-10-10
穩(wěn)定
產(chǎn)品高可用性高并發(fā)貼心
項(xiàng)目群及時(shí)溝通專業(yè)
產(chǎn)品經(jīng)理1v1支持快速
MVP模式小步快跑承諾
我們選擇聲譽(yù)堅(jiān)持
10年專注高端品質(zhì)開發(fā)聯(lián)系我們
友情鏈接: