前言:filereader是一種非同步檔案讀取機制,結合input:file可以很方便的讀取本地檔案。
在介紹filereader之前,先簡單介紹input的file型別。
input的file型別會渲染為乙個按鈕和一段文字。點選按鈕可開啟檔案選擇視窗,文字表示對檔案的描述(大部分情況下為檔名);file型別的input會有files屬性,儲存著檔案的相關資訊。點選按鈕上傳乙個檔案後,在控制台列印input.files,如下:
可以發現input.files是乙個陣列,由傳入的file物件組成。每個file物件包含以下屬性:
lastmodified:數值,表示最近一次修改時間的毫秒數;
lastmodifieddate:物件,表示最後一次表示最近一次修改時間的date物件(高程中說是字串,根據上圖可看出應該為物件,為了層級清晰未對其展開,大家可自行檢視,其可呼叫date物件的有關方法,例如getday方法);
name:本地檔案系統中的檔名;
size:檔案的位元組大小;
type:字串,檔案的mime型別;
weblitrelativepath:此處為空;當在input上加上webkitdirectory屬性時,使用者可選擇資料夾,此時weblitrelativepath表示資料夾中檔案的相對路徑。比如:
點選按鈕新增乙個包含3個檔案的名為php的資料夾後,控制台列印inputbox.files,如下:可看出,此時weblitrelativepath表示當前file物件的檔案在資料夾中的路徑。
以上file物件只獲取到了對檔案的描述資訊,但沒有獲得檔案中的資料,而inputbox.value也只是儲存的是檔案的絕對路徑(這裡就不展示了,大家可以自己試一試)。我們可以通過html5提供的filereader讀取到檔案中的資料。
首先建立乙個filereader例項:
var reader = new filereader();【方法】
filereader提供了如下方法:
readasarraybuffer(file)
按位元組讀取檔案內容,結果用arraybuffer物件表示
readasbinarystring(file)
按位元組讀取檔案內容,結果為檔案的二進位制串
readasdataurl(file)
讀取檔案內容,結果用data:url的字串形式表示
readastext(file,encoding)
按字元讀取檔案內容,結果用字串形式表示
abort()
終止檔案讀取操作
readasdataurl和readastext較為常用,這裡只對這兩者進行說明。
readasdataurl會將檔案內容進行base64編碼後輸出:
【事件】
onabort
當讀取操作被中止時呼叫
onerror
當讀取操作發生錯誤時呼叫
onload
當讀取操作成功完成時呼叫
onloadend
當讀取操作完成時呼叫,無論成功或失敗
onloadstart
當讀取操作開始時呼叫
onprogress
在讀取資料過程中週期性呼叫
每過50ms左右,就會觸發一次progress事件,對於較大的檔案可以利用progress實現進度條;onload事件在onloadend之前觸發。
由於種種原因無法讀取檔案時,會觸發error事件。觸發error事件時,相關資訊儲存在filereader物件的error屬性中,這個屬性將儲存乙個物件,此物件只有乙個屬性code,即錯誤碼。1表示未找到檔案,2表示安全性錯誤,3表示讀取中斷,4表示檔案不可讀,5表示編碼錯誤。
如果想中斷讀取過程,可以呼叫abort方法,就會觸發abort事件。
無論觸發load,error,abort事件中哪乙個,最終都會觸發loadend事件。
FileReader檔案讀取API
用來把檔案讀入記憶體,並且讀取檔案中的資料。filereader介面提供了乙個非同步api,使用該api可以在瀏覽器主線程中非同步訪問檔案系統,讀取檔案中的資料。1 filereader介面的方法 filereader介面有4個方法,其中3個用來讀取檔案,另乙個用來中斷讀取。無論讀取成功或失敗,方法...
FileReader檔案讀取操作
1.filereader 描述 filereader是html5中新增的乙個類,用來對input中 檔案上傳操作file型別 進行處理的類。通過該類建立的物件中提供了一些方法,能夠對上傳的檔案進行 預先的讀寫 從而在某種情況下實現 預覽 效果。說明 檔案讀寫一般分為三種方式 1 文字讀取 2 url...
FileReader讀取中文txt檔案編碼丟失問題
有乙個utf 8編碼的文字檔案,用filereader讀取到乙個字串,然後轉換字符集 str new string str.getbytes utf 8 結果大部分中文顯示正常,但最後仍有部分漢字顯示為問號!public static listgetlines string filename br....