相关文章推荐
独立的树叶  ·  求助:FileReader ...·  2 周前    · 
迷茫的红豆  ·  Windows版 Jenkins ...·  2 年前    · 
豪情万千的芒果  ·  c++ enum class ...·  2 年前    · 
坚韧的弓箭  ·  在Kotlin ...·  2 年前    · 

<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物件,檔案讀取的動作採非同步方式。要讀取檔案可以利用幾個方法:

  • readAsText :以文字方式讀檔案內容,放到result屬性,預設使用的編碼方式是「UTF-8」。
  • readAsDataURL:讀取到的內容會編碼成data URL,放到result屬性。
  • readAsArrayBuffer:result屬性會包含一個ArrayBuffer物件。
  • readAsBinaryString:以二進位方式讀檔案內容,放到result屬性。
  • (4).File API功能

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

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

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

  • abort():取消讀取。
  • readAsArrayBuffer():讀取檔案,並傳回一個 array buffer 物件,這個物件由 JavaScript 支援。
  • readAsBinaryString():讀取檔案,並傳回一個 binary string 字串。
  • readAsDataURL():讀取檔案,並傳回一個 Data URI 格式的字串。
  • readAsText():讀取檔案,並傳回文字內容,可依傳入的編碼做處理。
  • 請注意,在 FileReader 裡面,所有的讀取動作都是非同步的,所以在呼叫 read 方法之前,必須要先掛載一個 onload 的事件常式,以擷取讀取的結果,在事件參數中,使用 result 屬性來取得結果

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

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

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

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

  • onabort:在呼叫 abort() 時引發。
  • onerror:在讀檔失敗時引發。
  • onloadend:在讀檔工作完成時引發,不論成功或失敗。
  • onloadstart:在讀檔開始時引發。
  • onprogress:在讀檔之間回報進度。
  • FileReader屬性
    error            唯讀 讀取文件時發生的錯誤
    readyState  唯讀 顯示目前FileReader狀態 EMPTY==0 LOADING==1 DONE==2
    result           唯讀 讀取到的文件内容.該屬性只在讀取操作完後才有效,數據格式依讀取操作方式而不同
    FileReader 包含四個非同步讀取文件的方法:

  • FileReader.readAsBinaryString(Blob|File)
  • result 屬性將包含二進位字元串形式的 file/blob 數據。
  • FileReader.readAsText(Blob|File, opt_encoding)
  • result 屬性將包含文本字串形式的 file/blob 數據。預設UTF-8
  • FileReader.readAsArrayBuffer(Blob|File)
  • result 屬性將包含 ArrayBuffer 物件形式的 file/blob 數據。
  • FileReader.readAsDataURL(Blob|File)
  • 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