FileReader

FileReader允許基本檔的存取權限。

屬性

  • readyState: 一個讀者的三個可能的狀態,要麼 EMPTYLOADINGDONE.

  • 結果: 已讀取檔的內容。() DOMString

  • 錯誤: 包含錯誤的物件。() FileError

  • onloadstart: 讀取啟動時調用。(函數)

  • onload: 讀取已成功完成時調用。(函數)

  • onabort: 當已中止,讀取時調用。例如,通過調用 abort() 方法。(函數)

  • onerror: 當讀取已失敗時調用。(函數)

  • onloadend: 當請求已完成 (無論成功或失敗) 時調用。(函數)

注:以下產權不受支援:

  • onprogress: 讀取該檔,報告進度的角度時稱為 progress.loaded / progress.total(函數)

方法

  • 中止: 中止讀取檔。

  • readAsDataURL: 讀取檔並返回資料作為 base64 編碼的資料的 URL。

  • readAsText: 檔中讀取文本。

  • readAsBinaryString: 讀取檔為二進位檔案,並返回一個二進位字串。

  • readAsArrayBuffer: 讀取檔作為ArrayBuffer.

詳細資訊

FileReader物件提供的方法來從該設備的檔案系統中讀取檔。 可以讀取檔,作為文本或 base64 編碼的資料的字串。 事件攔截器接收 loadstartprogressloadloadenderror ,和 abort 的事件。

支援的平臺

  • Android 系統
  • 黑莓手機 WebWorks (OS 5.0 和更高)
  • iOS
  • Windows Phone 7 和 8
  • Windows 8

readAsDataURL

參數:

  • : 要讀取的檔物件。

快速的示例

function win(file) {
    var reader = new FileReader();
    reader.onloadend = function (evt) {
        console.log("read success");
        console.log(evt.target.result);
    };
    reader.readAsDataURL(file);
};

var fail = function (error) {
    console.log(error.code);
};

entry.file(win, fail);

readAsText

參數:

  • : 要讀取的檔物件。

  • 編碼: 使用編碼的檔內容的編碼。預設值為 UTF8。

快速的示例

function win(file) {
    var reader = new FileReader();
    reader.onloadend = function (evt) {
        console.log("read success");
        console.log(evt.target.result);
    };
    reader.readAsText(file);
};

var fail = function (error) {
    console.log(error.code);
};

entry.file(win, fail);

中止

function win(file) {
    var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log("read success");
        console.log(evt.target.result);
    };
    reader.readAsText(file);
    reader.abort();
};

function fail(error) {
    console.log(error.code);
}

entry.file(win, fail);

完整的示例

<!DOCTYPE html>
<html>
  <head>
    <title>FileReader Example</title>

    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8">

    // Wait for device API libraries to load
    //
    document.addEventListener("deviceready", onDeviceReady, false);

    // device APIs are available
    //
    function onDeviceReady() {
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
    }

    function gotFS(fileSystem) {
        fileSystem.root.getFile("readme.txt", null, gotFileEntry, fail);
    }

    function gotFileEntry(fileEntry) {
        fileEntry.file(gotFile, fail);
    }

    function gotFile(file){
        readDataUrl(file);
        readAsText(file);
    }

    function readDataUrl(file) {
        var reader = new FileReader();
        reader.onloadend = function(evt) {
            console.log("Read as data URL");
            console.log(evt.target.result);
        };
        reader.readAsDataURL(file);
    }

    function readAsText(file) {
        var reader = new FileReader();
        reader.onloadend = function(evt) {
            console.log("Read as text");
            console.log(evt.target.result);
        };
        reader.readAsText(file);
    }

    function fail(error) {
        console.log(error.code);
    }

    </script>
  </head>
  <body>
    <h1>Example</h1>
    <p>Read File</p>
  </body>
</html>

iOS 的怪癖

  • 編碼參數不受支援,並且 UTF8 編碼總是在效果。

readAsBinaryString

目前僅支援 iOS 和 android 系統。

參數:

  • : 要讀取的檔物件。

快速的示例

function win(file) {
    var reader = new FileReader();
    reader.onloadend = function (evt) {
        console.log("read success");
        console.log(evt.target.result);
    };
    reader.readAsBinaryString(file);
};

var fail = function (error) {
    console.log(error.code);
};

entry.file(win, fail);

readAsArrayBuffer

目前僅支援 iOS 和 android 系統。

參數:

  • : 要讀取的檔物件。

快速的示例

function win(file) {
    var reader = new FileReader();
    reader.onloadend = function (evt) {
        console.log("read success");
        console.log(new Uint8Array(evt.target.result));
    };
    reader.readAsArrayBuffer(file);
};

var fail = function (error) {
    console.log(error.code);
};

entry.file(win, fail);