FileReader讀取檔案

2022-03-07 14:28:06 字數 2812 閱讀 2443

前言: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....