• <kbd id="qyk40"></kbd>
  • <strike id="qyk40"></strike><samp id="qyk40"><pre id="qyk40"></pre></samp>

    在眾多HTML5規(guī)范中,有一部分規(guī)范是跟文件處理有關(guān)的,在早期的瀏覽器技術(shù)中,處理小量字符串是js最擅長的處理之一。但文件處理,尤其是二進(jìn)制文件處理,一直是個(gè)空白。在一些情況下,我們不得不通過Flash/ActiveX/NP插件或云端的服務(wù)器處理較為復(fù)雜或底層的數(shù)據(jù)。今天,HTML5的一系列新規(guī)范正在致力于讓瀏覽器具備更強(qiáng)大的文件處理能力。

    今天要介紹的FileAPI,就是為解決這類問題而生的。

    總覽

    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接口

    
    
    1. #FileList[index] // 得到第index個(gè)文件 

    Blob接口

    
    
    1. #Blob.size // 只讀特性,數(shù)據(jù)的字節(jié)數(shù)  
    2. #Blob.slice(start, length) // 將當(dāng)前文件切割并將結(jié)果返回 

    File接口

    
    
    1. #File.size // 繼承自Blob,意義同上  
    2. #File.slice(start, length) // 繼承自Blob,意義同上  
    3. #File.name // 只讀屬性,文件名  
    4. #File.type // 只讀屬性,文件的MIME類型  
    5. #File.urn // 只讀屬性,代表該文件的URN,幾乎用不到,暫且無視 

    FileReader方法

    
    
    1. #FileReader.readAsBinaryString(blob/file) // 以二進(jìn)制格式讀取文件內(nèi)容  
    2. #FileReader.readAsText(file, [encoding]) // 以文本(及字符串)格式讀取文件內(nèi)容,并且可以強(qiáng)制選擇文件編碼  
    3. #FileReader.readAsDataURL(file) // 以DataURL格式讀取文件內(nèi)容  
    4. #FileReader.abort() // 終止讀取操作 

    FileReader事件

    
    
    1. #FileReader.onloadstart // 讀取操作開始時(shí)觸發(fā)  
    2. #FileReader.onload // 讀取操作成功時(shí)觸發(fā)  
    3. #FileReader.onloadend // 讀取操作完成時(shí)觸發(fā)(不論成功還是失敗)  
    4. #FileReader.onprogress // 讀取操作過程中觸發(fā)  
    5. #FileReader.onabort // 讀取操作被中斷時(shí)觸發(fā)  
    6. #FileReader.onerror // 讀取操作失敗時(shí)觸發(fā) 

    FileReader屬性

    
    
    1. #FileReader.result // 讀取的結(jié)果(二進(jìn)制、文本或DataURL格式)  
    2. #FileReader.readyState // 讀取操作的狀態(tài)(EMPTY、LOADING、DONE) 

    代碼示例

    舉例一:控制file控件,讀取其中的第二個(gè)文件,并將其文本內(nèi)容在控制臺(tái)輸出

    
    
    1. var input = document.querySelector('input[type="file"]'); // 找到第一個(gè)file控件  
    2. var firstFile = input.files[0]; // file控件的files特性其實(shí)就是一個(gè)FileList類型的對(duì)象  
    3. var secondFile = input.files[1]; // 當(dāng)file控件的multiple特性為true時(shí),我們可以同時(shí)選擇多個(gè)文件,通過input.files[n]可以按序訪問這些文件  
    4. var reader = new FileReader(); // 新建一個(gè)FileReader類型的對(duì)象  
    5. reader.readAsText(secondFile); // 按文本格式讀取file控件中的第二個(gè)文件  
    6. reader.onloadend = function (e) { // 綁定讀取操作完成的事件  
    7.     console.log(reader.result); // 取得讀取結(jié)果并輸出  
    8. }; 

    舉例二:給一個(gè)含utf-8編碼的文本文件file去掉BOM頭信息

    
    
    1. var size = file.size; // 先取得文件總字節(jié)數(shù)  
    2. 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ù)不是“length”,而是“end”,話句話說,上面的示例二應(yīng)改為file.webkitSlice(3, size)才能生效

    3. 規(guī)范中還明確規(guī)定了各種出錯(cuò)處理和異常處理,這些內(nèi)容是同樣重要的:不論對(duì)于一套完備的規(guī)范,還是對(duì)于一個(gè)健壯的程序而言。由于篇幅有限,這部分就不細(xì)說了,大家可以在W3C官網(wǎng)自由查閱

    穩(wěn)定

    產(chǎn)品高可用性高并發(fā)

    貼心

    項(xiàng)目群及時(shí)溝通

    專業(yè)

    產(chǎn)品經(jīng)理1v1支持

    快速

    MVP模式小步快跑

    承諾

    我們選擇聲譽(yù)

    堅(jiān)持

    10年專注高端品質(zhì)開發(fā)
    • 返回頂部
    蜜臀91精品国产免费观看| 精品国产一二三区在线影院| 自拍偷自拍亚洲精品第1页 | 日韩在线视频二区| 国产精品国产三级国产av剧情| 午夜精品久久久久成人| 国产精品俺来也在线观看| 亚洲视频国产精品| 91麻豆精品激情在线观看最新 | 狠狠色婷婷久久综合频道日韩| 国产精品视_精品国产免费| 精品国产理论在线观看不卡| 久久久精品人妻久久影视| 国产在线精品香蕉麻豆| 久久精品国产99国产精品亚洲| 97在线视频精品| 2021午夜国产精品福利| 91精品国产闺蜜国产在线闺蜜| 999精品视频在线观看| 久久Av无码精品人妻系列| 91大神精品网站在线观看| 中文精品久久久久国产网址| **毛片免费观看久久精品| 亚洲狠狠ady亚洲精品大秀| 精品久久久无码人妻中文字幕| 国产精品久久成人影院| 69SEX久久精品国产麻豆| 精品国产日韩久久亚洲| 精品国产性色无码AV网站| MM1313亚洲国产精品| 精品国产免费观看| 国产亚洲精品91| 亚洲 欧洲 日韩 综合在线| 日韩AV片无码一区二区不卡| 无码8090精品久久一区| 国产成人精品日本亚洲专区| 精品一久久香蕉国产线看播放 | 99国产精品无码| 人妻少妇看A偷人无码精品| 成人99国产精品| 中文字幕日韩高清版毛片|