摘要:如果二進(jìn)制大對(duì)象引用處于非可讀狀態(tài)在上下文對(duì)象上設(shè)置錯(cuò)誤屬性,用來(lái)返回,并且觸發(fā)一個(gè)事件,在上下文對(duì)象中調(diào)用錯(cuò)誤,終止流程。當(dāng)該方法被調(diào)用,用戶代理將會(huì)執(zhí)行以下過(guò)程如果狀態(tài)為,拋出非法狀態(tài)錯(cuò)誤異常,并終止流程。
FileReader API
FileReader api為用戶提供了方法去讀取一個(gè)文件或者一個(gè)二進(jìn)制大對(duì)象,并且提供了事件模型讓用戶可以操作讀取后的結(jié)果。
接口// window, worker中可用 [Constructor, Exposed=Window,Worker] // 實(shí)現(xiàn)EventTarget的FileReader接口聲明 interface FileReader: EventTarget { // 異步的讀取方法 // 直接讀取二進(jìn)制大對(duì)象為ArrayBuffer類型 void readAsArrayBuffer(Blob blob); // 讀取為文本,第二個(gè)參數(shù)可指定編碼類型 void readAsText(Blob blob, optional DOMString label); // 讀取為base64格式 void readAsDataURL(Blob blob); // 中斷讀取 void abort(); // 狀態(tài)常量 // 還沒有加載任何數(shù)據(jù) const unsigned short EMPTY = 0; // 數(shù)據(jù)正在加載中 const unsigned short LOADING = 1; // 已完成全部的讀取請(qǐng)求 const unsigned short DONE = 2; // 只讀,獲取常量中的某一個(gè)狀態(tài) readonly attribute unsigned short readyState; // 返回文件結(jié)果,只讀的,只有在讀取結(jié)束后才有效 // 數(shù)據(jù)的格式取決于讀取操作是由哪個(gè)方法發(fā)起的 readonly attribute (DOMString or ArrayBuffer)? result; // 如果讀取時(shí)發(fā)生錯(cuò)誤,只讀的 readonly attribute DOMError? error; // 事件方法屬性 // 當(dāng)讀取開始時(shí)的事件 attribute EventHandler onloadstart; // 當(dāng)進(jìn)行時(shí)的事件 attribute EventHandler onprogress; // 當(dāng)讀取時(shí)的事件 attribute EventHandler onload; // 當(dāng)取消時(shí)的事件 attribute EventHandler onabort; // 當(dāng)錯(cuò)誤時(shí)的事件 attribute EventHandler onerror; // 當(dāng)讀取完成的事件 attribute EventHandler onloadend; };構(gòu)造器
當(dāng)FileReader構(gòu)造器被調(diào)用的時(shí)候,用戶代理必須返回一個(gè)新的FileReader對(duì)象。該構(gòu)造器必須在Window 或者 WorkerGlobalScope 環(huán)境下可用.
事件處理屬性下列的內(nèi)容是事件處理屬性和他們的事件處理類型:
事件處理屬性 | 事件處理類型 |
onloadstart | loadstart |
onprogress | progress |
onabort | abort |
onerror | error |
onload | load |
onloadend | loadend |
FileReader對(duì)象有三種狀態(tài),在readyState屬性中,當(dāng)觸發(fā)getting訪問操作,必然會(huì)返回一個(gè)FileReader的當(dāng)前狀態(tài),而他的值必然是下面三個(gè)中的其中一個(gè):
EMPTY (數(shù)字值為 0)
當(dāng)FileReader對(duì)象唄創(chuàng)建的時(shí)候,是不存在pending讀取狀態(tài)的,因?yàn)榇藭r(shí)沒有任何讀取方法被調(diào)用。這個(gè)空狀態(tài)是創(chuàng)建FileReader時(shí)候的初始狀態(tài),直到某個(gè)讀取方法被調(diào)用。
LOADING (數(shù)字值為 1)
當(dāng)一個(gè)文件或者二進(jìn)制大對(duì)象正在被讀取,某一個(gè)讀取方法正在進(jìn)行的時(shí)候,并且沒有錯(cuò)誤發(fā)生的時(shí)候,狀態(tài)為loading
DONE (數(shù)字值為2)
當(dāng)文件對(duì)象或者二進(jìn)制大對(duì)象被讀入內(nèi)存的時(shí)候,或者發(fā)生一個(gè)讀取錯(cuò)誤的時(shí)候,或者用戶調(diào)用了abort()操作的時(shí)候,這個(gè)時(shí)候,F(xiàn)ileReader不再進(jìn)行讀取,如果狀態(tài)被設(shè)置為了完成,這意味著某一個(gè)讀取方法被調(diào)用過(guò)了讀取一個(gè)文件或者二進(jìn)制大對(duì)象(Blob)
FileReader接口有三個(gè)異步讀取方法,readAsArrayBuffer, readAsText, and readAsDataURL,他們可以把文件讀入內(nèi)存,如果多個(gè)讀取方法同時(shí)被調(diào)用(一個(gè)FileReader對(duì)象上),用戶代理必須在任何讀取進(jìn)行中的時(shí)候拋出一個(gè)非法狀態(tài)錯(cuò)誤
result屬性當(dāng)訪問result屬性,該屬性將會(huì)返回一個(gè)原始二進(jìn)制數(shù)據(jù)或者一個(gè)ArrayBuffer對(duì)象或者null以表示所讀取文件的內(nèi)容.
當(dāng)訪問該屬性的時(shí)候,如果準(zhǔn)備狀態(tài)為EMPTY,你將得到一個(gè)null結(jié)果
當(dāng)訪問該屬性的時(shí)候,如果讀取過(guò)程中發(fā)生了錯(cuò)誤,你將得到一個(gè)null結(jié)果
當(dāng)訪問該屬性的時(shí)候,如果是使用了readAsBataURL讀取方法,result屬性必然會(huì)返回一個(gè)DataURL編碼的字符串
當(dāng)訪問該屬性的時(shí)候,如果readAsText讀取方法被調(diào)用,并且沒發(fā)生錯(cuò)誤,該屬性將返回指定編碼的文檔字符串。
當(dāng)訪問該屬性的時(shí)候,如果readAsArrayBuffer方法被調(diào)用,并且中間沒有錯(cuò)誤發(fā)生,該屬性將返回一個(gè)ArrayBuffer對(duì)象
readAsDataURL(blob) 方法當(dāng)調(diào)用該方法,用戶代理將會(huì)執(zhí)行以下步驟
如果狀態(tài)為loading,拋出非法狀態(tài)錯(cuò)誤異常,并終止流程。
如果二進(jìn)制大對(duì)象引用處于非可讀狀態(tài)( CLOSED readability state),在上下文對(duì)象上設(shè)置錯(cuò)誤屬性,用來(lái)返回 InvalidStateError DOMError,并且觸發(fā)一個(gè)error事件,在上下文對(duì)象中調(diào)用錯(cuò)誤,終止流程。
如果沒事,就將讀取狀態(tài)設(shè)置為L(zhǎng)OADING。
初始化一個(gè)帶注解的讀取任務(wù),將blob參數(shù)作為輸入并且處理在下述file reading task source上的任務(wù)隊(duì)列
處理讀取錯(cuò)誤,如果開始讀取就失敗,流程將進(jìn)入錯(cuò)誤觸發(fā)流程
處理讀取并且觸發(fā)loadstart事件
處理讀取到的數(shù)據(jù),觸發(fā)progress事件
處理讀取到結(jié)束符(EOF),執(zhí)行以下步驟:
設(shè)置readyState為DONE
設(shè)置result屬性內(nèi)容為讀操作的DataURL結(jié)果,當(dāng)訪問該屬性的時(shí)候,將二進(jìn)制對(duì)象數(shù)據(jù)以DataURL形式返回
觸發(fā)load事件
直到readyState不是loading狀態(tài),觸發(fā)loadend事件
結(jié)束流程
readAsText(blob, label) 方法該方法接受一個(gè)額外的可選參數(shù)label,他是一個(gè)字符串,表明讀取成的文檔應(yīng)該以何種形式編碼,如果提供了該參數(shù),當(dāng)在調(diào)用該方法過(guò)程中,將會(huì)以該種編碼形式編碼讀取到的文檔。
當(dāng)該方法被調(diào)用,用戶代理將會(huì)執(zhí)行以下過(guò)程:
如果readyState狀態(tài)為loading,拋出非法狀態(tài)錯(cuò)誤異常,并終止流程。
如果二進(jìn)制大對(duì)象引用處于非可讀狀態(tài)( CLOSED readability state),在上下文對(duì)象上設(shè)置錯(cuò)誤屬性,用來(lái)返回 InvalidStateError DOMError,并且觸發(fā)一個(gè)error事件,在上下文對(duì)象中調(diào)用錯(cuò)誤,終止流程。
如果沒事,就將讀取狀態(tài)設(shè)置為L(zhǎng)OADING。
初始化一個(gè)帶注解的讀取任務(wù),將blob參數(shù)作為輸入并且處理在下述file reading task source上的任務(wù)隊(duì)列
處理讀取錯(cuò)誤,如果開始讀取就失敗,流程將進(jìn)入錯(cuò)誤觸發(fā)流程
處理讀取并且觸發(fā)loadstart事件
處理讀取到的數(shù)據(jù),觸發(fā)progress事件
處理讀取到結(jié)束符(EOF),執(zhí)行以下步驟:
設(shè)置readyState為DONE
設(shè)置result屬性內(nèi)容為讀操作的結(jié)果,當(dāng)訪問該屬性的時(shí)候,將數(shù)據(jù)以規(guī)定編碼形式編碼后返回
觸發(fā)load事件
直到readyState不是loading狀態(tài),觸發(fā)loadend事件
結(jié)束流程
readAsArrayBuffer(blob) 方法當(dāng)該方法被調(diào)用,用戶代理執(zhí)行以下步驟:
如果readyState狀態(tài)為loading,拋出非法狀態(tài)錯(cuò)誤異常,并終止流程。
如果二進(jìn)制大對(duì)象引用處于非可讀狀態(tài)( CLOSED readability state),在上下文對(duì)象上設(shè)置錯(cuò)誤屬性,用來(lái)返回 InvalidStateError DOMError,并且觸發(fā)一個(gè)error事件,在上下文對(duì)象中調(diào)用錯(cuò)誤,終止流程。
如果沒事,就將讀取狀態(tài)設(shè)置為L(zhǎng)OADING。
初始化一個(gè)帶注解的讀取任務(wù),將blob參數(shù)作為輸入并且處理在下述file reading task source上的任務(wù)隊(duì)列
處理讀取錯(cuò)誤,如果開始讀取就失敗,流程將進(jìn)入錯(cuò)誤觸發(fā)流程
處理讀取并且觸發(fā)loadstart事件
處理讀取到的數(shù)據(jù),觸發(fā)progress事件
處理讀取到結(jié)束符(EOF),執(zhí)行以下步驟:
設(shè)置readyState為DONE
設(shè)置result屬性內(nèi)容為讀操作的結(jié)果,當(dāng)訪問該屬性的時(shí)候,將數(shù)據(jù)以ArrayBuffer對(duì)象的形式返回
觸發(fā)load事件
直到readyState不是loading狀態(tài),觸發(fā)loadend事件
結(jié)束流程
錯(cuò)誤處理步驟首先,這些錯(cuò)誤步驟是用于處理讀取過(guò)程中獲得失敗原因的。
設(shè)置上下文中的readyState為DONE狀態(tài),然后將result置null
設(shè)置上下文中的error屬性,當(dāng)我們?cè)L問ctx.error的時(shí)候,值返回一個(gè)DOMError對(duì)象,該對(duì)象記錄了失敗原因。觸發(fā)error事件。
直到readyState不是loading狀態(tài),觸發(fā)loadend事件
流程終止并終止任何正在進(jìn)行的讀方法
abort() 方法當(dāng)調(diào)用該方法,用戶代理做以下事情:
如果readyState = EMPTY或者 readyState = DONE, 設(shè)置result為null,終止流程
如果狀態(tài)為L(zhǎng)OADING,設(shè)置狀態(tài)為DONE,設(shè)置result為null,
如果下述讀取任務(wù)在任務(wù)隊(duì)列中,從隊(duì)列中移除這些任務(wù)
終止正在執(zhí)行的讀取方法,終止其處理流程
觸發(fā)abort事件
觸發(fā)loadend事件
blob參數(shù)FileReader上有三個(gè)異步方法,F(xiàn)ileReaderSync有三個(gè)同步方法,URL對(duì)象上有createObjectURL,createFor兩個(gè)靜態(tài)方法,他們都接受一個(gè)叫做blob的參數(shù),這一章節(jié)將闡述該參數(shù)的定義
blob
這個(gè)形式參數(shù)是指調(diào)用時(shí)的一個(gè)二進(jìn)制大對(duì)象的實(shí)參,并且他必然是一個(gè)非底層文件系統(tǒng)拿到的File/Filelist/Blob對(duì)象的引用
聲明編碼當(dāng)我們通過(guò)readAsText(bolb, label)方法讀取blob對(duì)象的時(shí)候,必須遵循:
使 encoding 為 null
如果提供了label參數(shù),設(shè)置encoding = label,這個(gè)label字符串必須符合現(xiàn)行編碼標(biāo)準(zhǔn)所規(guī)定的各種編碼類型
如果"獲取編碼"(2這一步)這一步驟返回失敗,設(shè)置encoding為null
如果encoding為null,并且blob對(duì)象提供了type屬性,并且限定了一個(gè)字符集參數(shù)(例如 text/plain;charset=UTF-8),然后該步驟會(huì)取此限定參數(shù)作為encoding。
如果上一步失敗,設(shè)置encoding = null
如果encoding = null, 設(shè)置encoding = "utf-8"
獲取對(duì)blob的編碼結(jié)果
事件FileReader對(duì)象就是自己所接受事件的event target。。。因?yàn)閺牡谝徽鹿?jié)我們知道這個(gè)FileReader API是繼承自 EventTarget的。。。。
當(dāng)按照規(guī)范說(shuō)明觸發(fā)某個(gè)進(jìn)度事件(onload什么的,event對(duì)象的構(gòu)造函數(shù)是ProgressEvent)的時(shí)候,將遵循以下內(nèi)容:
進(jìn)度事件的e,是不會(huì)冒泡的e.bubbles = false
進(jìn)度事件的事件對(duì)象e是不可取消的 e.cancelable = false
術(shù)語(yǔ)“觸發(fā)一個(gè)事件(fire an event)”是在DOM Core規(guī)范中定義的。Progress Event是Progress Events規(guī)范定義的
const reader = new FileReader(); reader.onload = function (e) { console.log(e.target === this) // true console.log(this === reader) // true console.log(e.bubbles === false) // true console.log(e. cancelable === false) // true console.log(e.cancelBubble === false) // true console.log(console.log(e.constructor.toString())) // function ProgressEvent() { [native code] } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/88606.html
摘要:以上傳圖片為例。我們可以通過(guò)獲取上傳的圖片相關(guān)信息,但是想要實(shí)現(xiàn)本地預(yù)覽還需要借助來(lái)實(shí)現(xiàn)可以讀取本地圖片,并將圖片數(shù)據(jù)轉(zhuǎn)換成編碼的字符串形式嵌入到頁(yè)面中。在我們實(shí)現(xiàn)上傳圖片的效果里,就有用到。圖片預(yù)覽兼容處理及以下版本不支持和。 最近項(xiàng)目里需要用到上傳圖片并預(yù)覽的功能,于是寫了個(gè)jQuery預(yù)覽圖片插件,下載地址。如果有需要的,可以直接下載。第一次寫jQuery插件,如有不對(duì)之處,歡迎...
摘要:我們的功能需要用到的接口事件讀取完成,無(wú)論成功與否,還有方法將文件讀取為。檢測(cè)是否為圖片類型圖片的編碼這里設(shè)置獲取的數(shù)據(jù)獲取后臺(tái)的給的將文件讀取為上傳事件當(dāng)?shù)臅r(shí)候說(shuō)明我們成功的把圖片傳上七牛了,并且七牛給我們返回了一個(gè)字符串。 最近在做的一個(gè)聊天消息的功能。有個(gè)圖片上傳的功能,可以通過(guò)按鈕上傳也可以通過(guò)Ctrl+V上傳。按鈕上傳的我們可以通過(guò)七牛的API就可以做了,我們現(xiàn)在來(lái)說(shuō)說(shuō)Ctr...
摘要:創(chuàng)建新對(duì)象屬性讀取文件時(shí)發(fā)生的錯(cuò)誤表明對(duì)象的當(dāng)前狀態(tài)讀取到的文件內(nèi)容,只在讀取操作完成后才有效,數(shù)據(jù)格式取決于采用的讀取操作方法中止該讀取操作。以純文本的形式讀取,中的數(shù)據(jù)為字符串。屬性中將包含一個(gè)格式的字符串。讀取文件的二進(jìn)制源碼。 file 提供文件有關(guān)的信息 1. file對(duì)象 file對(duì)象的來(lái)源一般分為3種: (1)在元素上選擇上傳文件后返回的Filelist對(duì)象; (2)由...
閱讀 2587·2023-04-26 03:00
閱讀 1402·2021-10-12 10:12
閱讀 4198·2021-09-22 15:33
閱讀 2925·2021-09-22 15:06
閱讀 1537·2019-08-30 15:44
閱讀 2151·2019-08-30 13:59
閱讀 538·2019-08-30 11:24
閱讀 2418·2019-08-29 17:07