1. 程式人生 > 程式設計 >js利用FileReader讀取本地檔案或者blob方式

js利用FileReader讀取本地檔案或者blob方式

目錄
  • FileReader讀取本地檔案或blob
    • 一、FileReader的使用
    • 二、FileReader的方法
    • 三、FileReader的屬性
    • 四、FileReader的事件
  • 使用FileReader讀取本地磁碟檔案問題

    FileReader讀取本地檔案或blob

    FileReader物件提供了非同步讀取儲存在使用者計算機上的檔案的內容,使用 File或 Blob 物件指定要讀取的檔案或資料,FileReader介面提供了讀取檔案的方法和包含讀取結果的事件模型。

    一、FileReader的使用

    注意:如果需要相容低版本的瀏覽器,需要判斷一下FileReader物件是否存在。

    if (window.FileReader) {
     let reader = new FileReader();
    } else {
     console.log('你的瀏覽器不支援讀取檔案');
    }

    二、FileReader的方法

    www.cppcns.com
    方法 作用 引數 返回值
    abort() 中止讀取操作 none none
    readAsArrayBuffer() 讀取file和Blob內容 file/blob result屬性中返回ArrayBuffer資料物件的檔案內容
    readAsBinaryString()[已被W3廢棄] 讀取file和Blob內容 file/blob result屬性中返回原始二進位制資料的檔案內容
    readAsDataURL() 讀取file和Blob內容 file/blob

    result屬性中返回data:URL格式的Base64字串的檔案內容

    readAsText() 讀取file和Blob內容 file/blob result屬性中返回一個字串的檔案內容

    三、FileReader的屬性

    • FileReader.error(只讀):一個異常,表示在讀取檔案時發生的錯誤
    • FileReader.readyState(只讀http://www.cppcns.com):表示FileReader狀態的數字
    狀態名 描述
    0 EMPTY 未載入任何資料
    1 LOADING 資料載入中
    2 DONE

    資料載入完畢

    • FileReader.result(只讀):讀取完檔案的內容,該屬性在資料讀取完成之後才有效,檔案內容的格式是由讀取的方法所決定。

    四、FileReader的事件

    • FileReader.onabort:該事件是中止讀取的時候觸發。
    • FileReader.onerror:該事件是讀取發生錯誤的時候觸發。
    • FileReader.onload:該事件是讀取完成的時候觸發。
    • FileReader.onloadstart:該事件是讀取操作剛開始的時候觸發。
    • FileReader.onloadend:該事件是讀取結束的時候觸發(失敗和成功的時候都會觸發)。
    • FileReader.onprogress:該事件在讀取的時候觸發。

    注意:

    1、由於安全性原因,FileReader讀取的是由input傳入的檔案或者是由ajax讀取服務端返回的檔案,不可以是指定路徑的檔案的讀取。

    2、FileReader可以在webworker中使用。

    <!DOCTYPE html>
    <html class="no-">
    	<head>
    		<meta charset="utf-8" />
    		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
    		<title></title>
    		<meta name="description" content="" />
    		<meta name="viewport" content="width=device-width,initial-scale=1" />
    		<link rel="stylesheet" href="" />
    	</head>
     
    	<body>
    		<input type="file" id="myFile" />http://www.cppcns.com
    		<script type="text/">
    			if (window.FileReader) {
    				var reader = new FileReader();
    			} else {
    				console.log('你的瀏覽器不支援讀取檔案');
    			}
    			var myFile = document.querySelector('#myFile');
    			myFile.onchange = function () {
    				var file = myFile.files[0];
    				reader.readAsDataURL(file)客棧;
    				reader.onload = function () {
    					var data = reader.result;   //base64形式的檔案內容
    				};
                    reader.onerror = function(){
                        console.log('讀取失敗');
                        console.log(reader.error);
                    }
    			};
    		</script>
    	</body>
    </html>

    使用FileReader讀取本地磁碟檔案問題

    執行一個js檔案 (將js檔案置於專案的src下)

    (1) .net.URL url = TestScriptEngine.class.getClassLoader().getResource("a.js");
    (2)//System.out.println(url.getPath().substring(1).replace("%20"," "));
    (3)FileReader fileReader = new FileReader(url.getPath());

    執行時

    出現:Exception in thread "main" java.io.FileNotFoundException: D:\Eclipse%20WorkSpace\(java300)ScriptManager\bin\a.js (The system cannot find the path specified)

    若把url.getPath()換成"D:/Eclipse WorkSpace/(java300)ScriptManager/bin/a.js"我的本地檔案目錄,則可以成功讀取檔案

    url.getPath()的值為: D:\Eclipse%20WorkSpace\(java300)ScriptManager\bin\a.js 但是不能找到載入檔案

    問題就出現在“%20” ,Eclipse WorkSpace之間本來是空格,系統自動將其換為%20,導致執行是出錯

    對url.getPath()作一些處理,把url.getPath().substring(1).replace("%20"," "); 把%20替換為" "空格;問題解決

    以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。