HTML5 表單元件:client端客戶端電腦,開啟純文字檔案


 


 


(1).開啟檔案元件

<input id="file01" type="file" onchange="show02(this)"/>

(2).取得檔案參數

filename = thisfileinfo.files[0].name;
filesize= thisfileinfo.files[0].size;
filetype= thisfileinfo.files[0].type;
注意:可以複選

(3).讀取純文字檔的內容

function show02(fileinfo) {
file = fileinfo.files[0];
var fReader = new FileReader();
fReader.onload = function (event) {
document.getElementById('txt01').value = event.target.result;
};
fReader.readAsText(file);
}

(4).使用FileReader物件讀取檔案

若要讀取檔案中的內容,可以利用FileReader物件,檔案讀取的動作採非同步方式。要讀取檔案可以利用幾個方法:

 

(4).File API功能

File API 在 HTML5 中屬於基礎功能之一,它可以在本地端讀入二進位檔案,並且轉換成 Data URI (文字格式加上 base64 編碼字串的 URL,只要變成了文字樣式,再配合 DOM 的處理,就能將它塞到 DIV,Hidden Field 或其他的地方 (ex: localstorage),也可以將它指定給 img 來顯示等等,用途很廣。

<input type=”file” /> 和 File API 連接起來,

1 <input type="file" multiple="multiple" id="MyFile" />

使用者可以選擇多個檔案,而讀入的檔案在 DOM 內會變成一個稱為 Blob 的項目,我們可以透過 file 的 DOM 物件來瀏覽檔案的清單

Blob 物件有三個屬性可以存取:

如果要上傳的話,我們還需要讀入檔案,這是 HTML5 File API 最厲害的地方,它可以將二進位檔案讀入,但基於安全的理由,讀入的資料會被轉成字串 (base64),而不會讓 JavaScript 去操作二進位資料。讀取資料的物件稱為 FileReader,擁有下列方法:

 請注意,在 FileReader 裡面,所有的讀取動作都是非同步的,所以在呼叫 read 方法之前,必須要先掛載一個 onload 的事件常式,以擷取讀取的結果,在事件參數中,使用 result 屬性來取得結果

使用 readAsDataURL() 讀出的檔案內容是這樣:

data:application/vnd.openxmlformats-officedocument.presentationml.presentation  ;base64,  UEsDBBQABgAIAAAAIQBa...

伺服端的部份則只要可以解出 base64 的資料就可以了,ASP.NET 可用 Convert.FromBase64String(),將 base64 的部份拆出來後直接轉,但要注意的是 Data URI 會將 “+” 變成空白字元 (傳輸時的相容性),所以在解碼前要先將所有的空白字元轉換成 “+”,否則會解碼失敗。

除了 onload 以外,FileReader 還有下列事件可用:

FileReader屬性
error            唯讀 讀取文件時發生的錯誤
readyState  唯讀 顯示目前FileReader狀態 EMPTY==0 LOADING==1 DONE==2
result           唯讀 讀取到的文件内容.該屬性只在讀取操作完後才有效,數據格式依讀取操作方式而不同

FileReader 包含四個非同步讀取文件的方法:


result 屬性將包含二進位字元串形式的 file/blob 數據。


result 屬性將包含文本字串形式的 file/blob 數據。預設UTF-8


result 屬性將包含 ArrayBuffer 物件形式的 file/blob 數據。


result 屬性將包含編碼為data URL的 file/blob 數據。

data URL的格式,在維基百科的《Data URI scheme》記載了相關資訊。DataURI是一種特殊的URL格式,直接將文件內容編成一組URL字串內嵌在網頁中.
通常html文件的圖片是透過img的src屬性指向另一個圖片檔案的遠端網址URL,所以瀏覽器每下載一個圖檔就會觸發HTTP request.而我們使用FileReader產生的Data URI格式一樣也能指定給img的src屬性,因此達到頁面上即可顯示圖片內容,而不需上傳到伺服器端.

data URI的格式
data:[<MIME類型>][;charset=<charset>][;編碼方法],<編碼資料>

(*Blob-二進位大型物件binary large object的縮寫)

FileReader事件處理程序
onabort
當讀取操作被終止時調用.
onerror
當讀取操作發生錯誤時調用.
onload
當讀取操作成功完成時調用.
onloadend
當讀取操作完成時調用,不管是成功還是失敗.該處理常式在onload或者onerror之後調用.
因此在此事件讀取文件時,需要檢查fileReader物件的readyState
onloadstart
當讀取操作開始時調用.
onprogress
在讀取資料過程中週期性調用.