首頁  >  文章  >  web前端  >  基於HTML5 FileSystem API的使用介紹_html5教學技巧

基於HTML5 FileSystem API的使用介紹_html5教學技巧

WBOY
WBOY原創
2016-05-16 15:49:411301瀏覽

HTML5的強大之一就是允許web程式申請一些臨時或永久的空間(Quota)在這裡可以進行 資料的儲存甚至檔案的操作。

FileSystem提供了資料夾和檔案的建立、移動、刪除等操作,大大方便了資料的本地處理, 而且所有的資料都是在沙盒(sandboxed)中,不同的web程式不能互相訪問,這就保證了資料的完整和安全。

在CatWrite專案中,運用了HTML5的這個特性進行資料的存儲,很是方便,只是目前來說只有 Chrome瀏覽器對FileSystem API支援的比較好,所以只能運行在Chrome瀏覽器中。

在完成這個功能的時候,查閱了很多資料,有一些資料是一年前的,但是隨著瀏覽器版本的 變化,一些代碼已經老化,在這裡一一總結和整理。這裡只列舉了專案中用到的API,算是 對完成功能的一次梳理。

申請空間
為了進行數據的存儲,必須要向瀏覽器進行申請,如果是永久存儲還會向用戶進行詢問,只有 同意後才會繼續執行。

首先必須聲明想要的權限。

複製程式碼
程式碼如下:

windowrequestFileSystemquest.requestrem. window。就可以向瀏覽器申請空間




複製代碼
代碼如下:window. requestFileSystem(window.PERSISTENT, //persistent(永久) or temporary(臨時)
1024*1024, //1M
onInitFs, //成功後的回呼函數
errorHandler); //錯誤後的回呼函數


回呼函數




複製程式碼
複製程式碼
程式碼>
function onInitFs(fs){
fs.root.getDirectory('catwrite_documents', {create: true}, function(dirEntry) {
console.log('You have just created the ' dirEntry. name ' directory.');
}, errorHandler);
}
//錯誤回呼
function errorHandler(err){
var msg = 'An error occured: ';
。 directory not readable';
break;
case FileError.PATH_EXISTS_ERR:
break;
case FileError.PATH_EXISTS_ERR:
break;
case FileError.PATH_EXISTS_ERR:
msg = 'File or directory already exists';
break;
case Files4m. Invalid filetype';
break;
default:
msg = 'Unknown Error';
break;
};
console.log(msg err);
}
console.log(msg err);
}


如果成功後悔呼叫OnInitFs回調函數,在裡面用了getDirectory方法用來建立一個資料夾,這下面再說。

但是這是有個問題,這樣做的話每次加載頁面都會申請,這肯定不是我們想要的,我們要 的是在有數據的時候就可以讀取數據。

判斷是否有申請空間

所以我們需要讀取瀏覽器的數據,看看是否已有儲存。這就用到了另一個API:


複製程式碼程式碼如下:
程式碼如下:



程式碼如下:


程式碼如下:

程式碼如下:程式碼如下:
程式碼如下:程式碼如下:程式碼如下: in DOMString url, in EntryCallback successCallback, in optional ErrorCallback errorCallback ); 複製程式碼程式碼如下:

window.webkitStorageInfo.queryUsageAndQuota(webkitStorageInfo.PERSISTENT,
function(used, remaining){
if(remaining == ""){
console.log("未申請。 ");
}else{
console.log("使用空間" used);
console.log("全部空間" remaining);
}
},
errorHandler);


我們可以透過判斷remaining參數來判斷是否有申請空間,如果沒有申請,則返回上一步申請空間。 如果已經有空間的話,則需要得到空間的跟文件,這樣才能操作資料。

取得檔案入口
FileSystem使用了特殊的檔案系統和沙盒模式,在電腦上或其他web中是無法存取沙盒中的檔案的,只能用對應的格式去訪問。

在瀏覽器中輸入:

?filesystem:http://catcoder.com/persistent/
  

這樣可以存取catcoder.com這個網站在本機永久數據,把persistent換成temporary則是讀取臨時空間。

然後我們就可以透過URL和對應API取得檔案的入口(Lets you look up the entry for a file or directory with a local URL)。

複製程式碼
程式碼如下:

Ofid resol>程式碼如下: in EntryCallback successCallback,
in optional ErrorCallback errorCallback
);


🎜>

複製程式碼
代碼如下:var url = "filesystem:http://" window. location.host "/persistent/catwrite_documents/";
window.resolveLocalFileSystemURL(url,function(fileEntry){
console.log(fileEntry);
var dirReader = fileEntry.create =Reader( var readEntries = function(){
dirReader.readEntries(function(results){
if(!results.length){
create_file_title("預設檔", "");
console.log ("沒有檔案!");
}else{
console.log("讀取到" results.length "個檔案");
for(var i = 0; i console.log(results[i].name);
getFileContentByName(fileEntry, results[i].name);
}
}
},errorHandler);
};
readEntries();
},errorHandler);


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn